c9add2b7258031a3b1b49ce2e708de6fe3595966
[mdsal.git] / binding2 / mdsal-binding2-java-api-generator / src / main / twirl / org / opendaylight / mdsal / binding / javav2 / java / api / generator / classTemplate.scala.txt
1 @*
2  * Copyright (c) 2016 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
9 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.formatDataForJavaDoc
10 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.fieldName
11 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.propsAsArgs
12 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.propsAsList
13 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.valueForBits
14 @import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.wrapToDocumentation
15 @import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject
16 @import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType
17 @import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty
18 @import org.opendaylight.yangtools.yang.model.api.`type`.BitsTypeDefinition
19
20 @(genType: GeneratedType, genTo: GeneratedTransferObject, importedNames: Map[String, String], implementsList: String,
21 innerClasses: String, enumerations: String, constants: String, constructors: String, lengthRangeChecker: String,
22 fields: String, allProperties: List[GeneratedProperty], propertyMethod: String, isInnerClass: Boolean)
23 @if(genTo != null) {
24 @{wrapToDocumentation(formatDataForJavaDoc(genType))}
25 @annotationDeclaration()
26 @generateClassDeclaration(isInnerClass)
27     {
28     @if(genTo.getSUID != null) {private static final long serialVersionUID = @{genTo.getSUID.getValue}L;}
29     @{innerClasses}
30     @{enumerations}
31     @{constants}
32     @{fields}
33     @{lengthRangeChecker}
34
35     @{constructors}
36
37     @defaultInstance()
38
39     @{propertyMethod}
40
41     @if(genTo.isTypedef && genTo.getBaseType.isInstanceOf[BitsTypeDefinition]) {
42     public boolean[] getValue() {
43         return new boolean[]{
44             @{valueForBits(genTo.getProperties)}
45             };
46         }
47     }
48
49     @generateHashCode()
50
51     @generateEquals()
52
53     @generateToString(genTo.getToStringIdentifiers)
54     }
55 }
56
57 @annotationDeclaration() = {
58 @if(genTo.getAnnotations != null) {
59     @for(annotation <- genTo.getAnnotations) {
60         @@@{annotation.getName}
61     }
62 }
63 }
64
65 @generateClassDeclaration(isInnerCLass: Boolean) = {
66 public @{if (isInnerCLass) "static final "
67 else if(genType.isAbstract) "abstract "
68 else " "
69 }
70 class @{genType.getName}
71 @if(genTo.getSuperType != null) { extends @{importedNames.get("superType")}}
72 @if(!implementsList.isEmpty) { implements @{implementsList}}
73 }
74
75 @generateHashCode() = {
76 @if(!genTo.getHashCodeIdentifiers.isEmpty) {
77     @@Override
78     public int hashCode() {
79         final int prime = 31;
80         int result = 1;
81         @for(property <- genTo.getHashCodeIdentifiers) {
82             @if(property.getReturnType.getName.contains("[")) {
83                 result = prime * result + @{importedNames.get("arrays")}.hashCode(@{fieldName(property)});
84             } else {
85                 result = prime * result + @{importedNames.get("objects")}.hashCode(@{fieldName(property)});
86             }
87         }
88         return result;
89     }
90 }
91 }
92
93 @generateEquals() = {
94 @if(!genTo.getEqualsIdentifiers.isEmpty) {
95     @@Override
96     public boolean equals(java.lang.Object obj) {
97         if (this == obj) {
98             return true;
99         }
100         if (obj == null) {
101             return false;
102         }
103         if (getClass() != obj.getClass()) {
104             return false;
105         }
106         @{genTo.getName} other = (@{genTo.getName}) obj;
107         @for(property <- genTo.getEqualsIdentifiers) {
108             @if(property.getReturnType.getName.contains("[")) {
109                 if (!@{importedNames.get("arrays")}.equals(@{fieldName(property)}, other.@{fieldName(property)}))
110             } else {
111                 if (!@{importedNames.get("objects")}.equals(@{fieldName(property)}, other.@{fieldName(property)}))
112             }
113             {
114                 return false;
115             }
116         }
117         return true;
118     }
119 }
120 }
121
122 @generateToString(properties: List[GeneratedProperty]) = {
123 @if(properties != null) {
124     @@Override
125     public @{importedNames.get("string")} toString() {
126         @{importedNames.get("stringBuilder")} builder = new @{importedNames.get("stringBuilder")} (@{importedNames.get("type")}.class.getSimpleName()).append(" [");
127         boolean first = true;
128
129         @for(property <- properties) {
130             if (@{fieldName(property)} != null) {
131                 if (first) {
132                     first = false;
133                 } else {
134                     builder.append(", ");
135                 }
136                 builder.append("@{fieldName(property)}=");
137                 @if(property.getReturnType.getName.contains("[")) {
138                     builder.append(@{importedNames.get("arrays")}.toString(@{fieldName(property)}));
139                 } else {
140                     builder.append(@{fieldName(property)});
141                 }
142             }
143         }
144         return builder.append(']').toString();
145     }
146 }
147 }
148
149 @defaultInstance() = {
150 @if(genTo.isTypedef && !allProperties.isEmpty && !genTo.isUnionType) {
151     @if(!"org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(allProperties.get(0).getReturnType.getFullyQualifiedName)) {
152         public static @{genTo.getName} getDefaultInstance(String defaultValue) {
153             @if(allProperties.size > 1) {
154                 @{importedNames.get("list")}<@{importedNames.get("string")}> properties = @{importedNames.get("lists")}.newArrayList(@{propsAsArgs(allProperties)});
155                 if (!properties.contains(defaultValue)) {
156                     throw new @{importedNames.get("illegalArgumentException")}("invalid default parameter");
157                 }
158                 int i = 0;
159                 return new @{genTo.getName}(@propsAsList(allProperties, importedNames.get("boolean")));
160             } else {
161                 @if("byte[]".equals(allProperties.get(0).getReturnType.getName)) {
162                     @{importedNames.get("baseEncoding")} baseEncoding = @{importedNames.get("baseEncoding")}.base64();
163                     return new @{genTo.getName}(baseEncoding.decode(defaultValue));
164                 } else {
165                     @allProperties.get(0).getReturnType.getFullyQualifiedName match {
166                     case "java.lang.String" => {
167                         return new @{genTo.getName}(defaultValue);
168                     }
169                     case "java.lang.Boolean" => {
170                         return new @{genTo.getName}(@{importedNames.get("boolean")}.valueOf(defaultValue));
171                     }
172                     case "java.lang.Byte" => {
173                         return new @{genTo.getName}(@{importedNames.get("byte")}.valueOf(defaultValue));
174                     }
175                     case "java.lang.Short" => {
176                         return new @{genTo.getName}(@{importedNames.get("short")}.valueOf(defaultValue));
177                     }
178                     case "java.lang.Integer" => {
179                         return new @{genTo.getName}(@{importedNames.get("integer")}.valueOf(defaultValue));
180                     }
181                     case "java.lang.Long" => {
182                         return new @{genTo.getName}(@{importedNames.get("long")}.valueOf(defaultValue));
183                     }
184                     case _ => {
185                         return new @{genTo.getName}(new @{allProperties.get(0).getReturnType.getName}(defaultValue));
186                     }
187                     }
188                 }
189             }
190         }
191     }
192 }
193 }