github.com/phrase/openapi@v0.0.0-20240514140800-49e8a106740e/openapi-generator/templates/java/pojo.mustache (about) 1 /** 2 * {{description}}{{^description}}{{classname}}{{/description}}{{#isDeprecated}} 3 * @deprecated{{/isDeprecated}} 4 */{{#isDeprecated}} 5 @Deprecated{{/isDeprecated}} 6 {{#swagger1AnnotationLibrary}} 7 {{#description}} 8 @ApiModel(description = "{{{.}}}") 9 {{/description}} 10 {{/swagger1AnnotationLibrary}} 11 {{#swagger2AnnotationLibrary}} 12 {{#description}} 13 @Schema(description = "{{{.}}}") 14 {{/description}} 15 {{/swagger2AnnotationLibrary}} 16 {{#jackson}} 17 @JsonPropertyOrder({ 18 {{#vars}} 19 {{classname}}.JSON_PROPERTY_{{nameInSnakeCase}}{{^-last}},{{/-last}} 20 {{/vars}} 21 }) 22 {{#isClassnameSanitized}} 23 {{^hasDiscriminatorWithNonEmptyMapping}} 24 @JsonTypeName("{{name}}") 25 {{/hasDiscriminatorWithNonEmptyMapping}} 26 {{/isClassnameSanitized}} 27 {{/jackson}} 28 {{>additionalModelTypeAnnotations}}{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{>xmlAnnotation}} 29 {{#vendorExtensions.x-class-extra-annotation}} 30 {{{vendorExtensions.x-class-extra-annotation}}} 31 {{/vendorExtensions.x-class-extra-annotation}} 32 public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtensions.x-implements}}{{#-first}}implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{ 33 {{#serializableModel}} 34 private static final long serialVersionUID = 1L; 35 36 {{/serializableModel}} 37 {{#vars}} 38 {{#isEnum}} 39 {{^isContainer}} 40 {{>modelInnerEnum}} 41 {{/isContainer}} 42 {{#isContainer}} 43 {{#mostInnerItems}} 44 {{>modelInnerEnum}} 45 {{/mostInnerItems}} 46 {{/isContainer}} 47 {{/isEnum}} 48 {{#gson}} 49 public static final String SERIALIZED_NAME_{{nameInSnakeCase}} = "{{baseName}}"; 50 {{/gson}} 51 {{#jackson}} 52 public static final String JSON_PROPERTY_{{nameInSnakeCase}} = "{{baseName}}"; 53 {{/jackson}} 54 {{#withXml}} 55 {{#isXmlAttribute}} 56 @XmlAttribute(name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") 57 {{/isXmlAttribute}} 58 {{^isXmlAttribute}} 59 {{^isContainer}} 60 @XmlElement({{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") 61 {{/isContainer}} 62 {{#isContainer}} 63 // Is a container wrapped={{isXmlWrapped}} 64 {{#items}} 65 // items.name={{name}} items.baseName={{baseName}} items.xmlName={{xmlName}} items.xmlNamespace={{xmlNamespace}} 66 // items.example={{example}} items.type={{dataType}} 67 @XmlElement({{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") 68 {{/items}} 69 {{#isXmlWrapped}} 70 @XmlElementWrapper({{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}name = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") 71 {{/isXmlWrapped}} 72 {{/isContainer}} 73 {{#isDateTime}} 74 @XmlJavaTypeAdapter(OffsetDateTimeXmlAdapter.class) 75 {{/isDateTime}} 76 {{/isXmlAttribute}} 77 {{/withXml}} 78 {{#gson}} 79 @SerializedName(SERIALIZED_NAME_{{nameInSnakeCase}}) 80 {{/gson}} 81 {{#vendorExtensions.x-field-extra-annotation}} 82 {{{vendorExtensions.x-field-extra-annotation}}} 83 {{/vendorExtensions.x-field-extra-annotation}} 84 {{#vendorExtensions.x-is-jackson-optional-nullable}} 85 {{#isContainer}} 86 private JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>undefined(); 87 {{/isContainer}} 88 {{^isContainer}} 89 private JsonNullable<{{{datatypeWithEnum}}}> {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; 90 {{/isContainer}} 91 {{/vendorExtensions.x-is-jackson-optional-nullable}} 92 {{^vendorExtensions.x-is-jackson-optional-nullable}} 93 {{#isContainer}} 94 private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; 95 {{/isContainer}} 96 {{^isContainer}} 97 {{#isDiscriminator}}protected{{/isDiscriminator}}{{^isDiscriminator}}private{{/isDiscriminator}} {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}; 98 {{/isContainer}} 99 {{/vendorExtensions.x-is-jackson-optional-nullable}} 100 101 {{/vars}} 102 public {{classname}}() { 103 {{#parent}} 104 {{#parcelableModel}} 105 super();{{/parcelableModel}} 106 {{/parent}} 107 {{#gson}} 108 {{#discriminator}} 109 {{#discriminator.isEnum}} 110 this.{{{discriminatorName}}} = this.getClass().getSimpleName(); 111 {{/discriminator.isEnum}} 112 {{/discriminator}} 113 {{/gson}} 114 } 115 {{#vendorExtensions.x-has-readonly-properties}} 116 {{^withXml}} 117 118 {{#jsonb}}@JsonbCreator{{/jsonb}}{{#jackson}}@JsonCreator{{/jackson}} 119 public {{classname}}( 120 {{#readOnlyVars}} 121 {{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}} 122 {{/readOnlyVars}} 123 ) { 124 this(); 125 {{#readOnlyVars}} 126 this.{{name}} = {{#vendorExtensions.x-is-jackson-optional-nullable}}{{name}} == null ? JsonNullable.<{{{datatypeWithEnum}}}>undefined() : JsonNullable.of({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{name}}{{/vendorExtensions.x-is-jackson-optional-nullable}}; 127 {{/readOnlyVars}} 128 } 129 {{/withXml}} 130 {{/vendorExtensions.x-has-readonly-properties}} 131 {{#vars}} 132 133 {{^isReadOnly}} 134 public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { 135 {{#vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}});{{/vendorExtensions.x-is-jackson-optional-nullable}} 136 {{^vendorExtensions.x-is-jackson-optional-nullable}}this.{{name}} = {{name}};{{/vendorExtensions.x-is-jackson-optional-nullable}} 137 return this; 138 } 139 {{#isArray}} 140 141 public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { 142 {{#vendorExtensions.x-is-jackson-optional-nullable}} 143 if (this.{{name}} == null || !this.{{name}}.isPresent()) { 144 this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}); 145 } 146 try { 147 this.{{name}}.get().add({{name}}Item); 148 } catch (java.util.NoSuchElementException e) { 149 // this can never happen, as we make sure above that the value is present 150 } 151 return this; 152 {{/vendorExtensions.x-is-jackson-optional-nullable}} 153 {{^vendorExtensions.x-is-jackson-optional-nullable}} 154 if (this.{{name}} == null) { 155 this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new {{#uniqueItems}}LinkedHashSet{{/uniqueItems}}{{^uniqueItems}}ArrayList{{/uniqueItems}}<>(){{/defaultValue}}; 156 } 157 this.{{name}}.add({{name}}Item); 158 return this; 159 {{/vendorExtensions.x-is-jackson-optional-nullable}} 160 } 161 {{/isArray}} 162 {{#isMap}} 163 164 public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { 165 {{#vendorExtensions.x-is-jackson-optional-nullable}} 166 if (this.{{name}} == null || !this.{{name}}.isPresent()) { 167 this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}); 168 } 169 try { 170 this.{{name}}.get().put(key, {{name}}Item); 171 } catch (java.util.NoSuchElementException e) { 172 // this can never happen, as we make sure above that the value is present 173 } 174 return this; 175 {{/vendorExtensions.x-is-jackson-optional-nullable}} 176 {{^vendorExtensions.x-is-jackson-optional-nullable}} 177 {{^required}} 178 if (this.{{name}} == null) { 179 this.{{name}} = {{{defaultValue}}}{{^defaultValue}}new HashMap<>(){{/defaultValue}}; 180 } 181 {{/required}} 182 this.{{name}}.put(key, {{name}}Item); 183 return this; 184 {{/vendorExtensions.x-is-jackson-optional-nullable}} 185 } 186 {{/isMap}} 187 188 {{/isReadOnly}} 189 /** 190 {{#description}} 191 * {{.}} 192 {{/description}} 193 {{^description}} 194 * Get {{name}} 195 {{/description}} 196 {{#minimum}} 197 * minimum: {{.}} 198 {{/minimum}} 199 {{#maximum}} 200 * maximum: {{.}} 201 {{/maximum}} 202 * @return {{name}} 203 {{#deprecated}} 204 * @deprecated 205 {{/deprecated}} 206 **/ 207 {{#deprecated}} 208 @Deprecated 209 {{/deprecated}} 210 {{#required}} 211 {{#isNullable}} 212 @{{javaxPackage}}.annotation.Nullable 213 {{/isNullable}} 214 {{^isNullable}} 215 @{{javaxPackage}}.annotation.Nonnull 216 {{/isNullable}} 217 {{/required}} 218 {{^required}} 219 @{{javaxPackage}}.annotation.Nullable 220 {{/required}} 221 {{#jsonb}} 222 @JsonbProperty("{{baseName}}") 223 {{/jsonb}} 224 {{#useBeanValidation}} 225 {{>beanValidation}} 226 {{/useBeanValidation}} 227 {{#swagger1AnnotationLibrary}} 228 @ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") 229 {{/swagger1AnnotationLibrary}} 230 {{#swagger2AnnotationLibrary}} 231 @Schema({{#example}}example = "{{{.}}}", {{/example}}requiredMode = {{#required}}Schema.RequiredMode.REQUIRED{{/required}}{{^required}}Schema.RequiredMode.NOT_REQUIRED{{/required}}, description = "{{{description}}}") 232 {{/swagger2AnnotationLibrary}} 233 {{#vendorExtensions.x-extra-annotation}} 234 {{{vendorExtensions.x-extra-annotation}}} 235 {{/vendorExtensions.x-extra-annotation}} 236 {{#vendorExtensions.x-is-jackson-optional-nullable}} 237 {{!unannotated, Jackson would pick this up automatically and add it *in addition* to the _JsonNullable getter field}} 238 @JsonIgnore 239 {{/vendorExtensions.x-is-jackson-optional-nullable}} 240 {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} 241 public {{{datatypeWithEnum}}} {{getter}}() { 242 {{#vendorExtensions.x-is-jackson-optional-nullable}} 243 {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} 244 if ({{name}} == null) { 245 {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; 246 } 247 {{/isReadOnly}} 248 return {{name}}.orElse(null); 249 {{/vendorExtensions.x-is-jackson-optional-nullable}} 250 {{^vendorExtensions.x-is-jackson-optional-nullable}} 251 return {{name}}; 252 {{/vendorExtensions.x-is-jackson-optional-nullable}} 253 } 254 255 {{#vendorExtensions.x-is-jackson-optional-nullable}} 256 {{> jackson_annotations}} 257 public JsonNullable<{{{datatypeWithEnum}}}> {{getter}}_JsonNullable() { 258 return {{name}}; 259 } 260 {{/vendorExtensions.x-is-jackson-optional-nullable}}{{#vendorExtensions.x-is-jackson-optional-nullable}} 261 @JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}) 262 {{#isReadOnly}}private{{/isReadOnly}}{{^isReadOnly}}public{{/isReadOnly}} void {{setter}}_JsonNullable(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) { 263 {{! For getters/setters that have name differing from attribute name, we must include setter (albeit private) for jackson to be able to set the attribute}} 264 this.{{name}} = {{name}}; 265 } 266 {{/vendorExtensions.x-is-jackson-optional-nullable}} 267 268 {{^isReadOnly}} 269 {{#vendorExtensions.x-setter-extra-annotation}} {{{vendorExtensions.x-setter-extra-annotation}}} 270 {{/vendorExtensions.x-setter-extra-annotation}}{{#jackson}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{> jackson_annotations}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/jackson}} public void {{setter}}({{{datatypeWithEnum}}} {{name}}) { 271 {{#vendorExtensions.x-is-jackson-optional-nullable}} 272 this.{{name}} = JsonNullable.<{{{datatypeWithEnum}}}>of({{name}}); 273 {{/vendorExtensions.x-is-jackson-optional-nullable}} 274 {{^vendorExtensions.x-is-jackson-optional-nullable}} 275 this.{{name}} = {{name}}; 276 {{/vendorExtensions.x-is-jackson-optional-nullable}} 277 } 278 {{/isReadOnly}} 279 280 {{/vars}} 281 {{#parent}} 282 {{#allVars}} 283 {{#isOverridden}} 284 @Override 285 public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { 286 {{#vendorExtensions.x-is-jackson-optional-nullable}} 287 this.{{setter}}(JsonNullable.<{{{datatypeWithEnum}}}>of({{name}})); 288 {{/vendorExtensions.x-is-jackson-optional-nullable}} 289 {{^vendorExtensions.x-is-jackson-optional-nullable}} 290 this.{{setter}}({{name}}); 291 {{/vendorExtensions.x-is-jackson-optional-nullable}} 292 return this; 293 } 294 295 {{/isOverridden}} 296 {{/allVars}} 297 {{/parent}} 298 @Override 299 public boolean equals(Object o) { 300 {{#useReflectionEqualsHashCode}} 301 return EqualsBuilder.reflectionEquals(this, o, false, null, true); 302 {{/useReflectionEqualsHashCode}} 303 {{^useReflectionEqualsHashCode}} 304 if (this == o) { 305 return true; 306 } 307 if (o == null || getClass() != o.getClass()) { 308 return false; 309 }{{#hasVars}} 310 {{classname}} {{classVarName}} = ({{classname}}) o; 311 return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} && 312 {{/-last}}{{/vars}}{{#parent}} && 313 super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} 314 return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}} 315 {{/useReflectionEqualsHashCode}} 316 }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} 317 318 private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) { 319 return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get())); 320 }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} 321 322 @Override 323 public int hashCode() { 324 {{#useReflectionEqualsHashCode}} 325 return HashCodeBuilder.reflectionHashCode(this); 326 {{/useReflectionEqualsHashCode}} 327 {{^useReflectionEqualsHashCode}} 328 return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); 329 {{/useReflectionEqualsHashCode}} 330 }{{#vendorExtensions.x-jackson-optional-nullable-helpers}} 331 332 private static <T> int hashCodeNullable(JsonNullable<T> a) { 333 if (a == null) { 334 return 1; 335 } 336 return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31; 337 }{{/vendorExtensions.x-jackson-optional-nullable-helpers}} 338 339 @Override 340 public String toString() { 341 StringBuilder sb = new StringBuilder(); 342 sb.append("class {{classname}} {\n"); 343 {{#parent}} 344 sb.append(" ").append(toIndentedString(super.toString())).append("\n"); 345 {{/parent}} 346 {{#vars}} 347 sb.append(" {{name}}: ").append(toIndentedString({{name}})).append("\n"); 348 {{/vars}} 349 sb.append("}"); 350 return sb.toString(); 351 } 352 353 /** 354 * Convert the given object to string with each line indented by 4 spaces 355 * (except the first line). 356 */ 357 private{{#jsonb}} static{{/jsonb}} String toIndentedString(Object o) { 358 if (o == null) { 359 return "null"; 360 } 361 return o.toString().replace("\n", "\n "); 362 } 363 {{#supportUrlQuery}} 364 365 /** 366 * Convert the instance into URL query string. 367 * 368 * @return URL query string 369 */ 370 public String toUrlQueryString() { 371 return toUrlQueryString(null); 372 } 373 374 /** 375 * Convert the instance into URL query string. 376 * 377 * @param prefix prefix of the query string 378 * @return URL query string 379 */ 380 public String toUrlQueryString(String prefix) { 381 String suffix = ""; 382 String containerSuffix = ""; 383 String containerPrefix = ""; 384 if (prefix == null) { 385 // style=form, explode=true, e.g. /pet?name=cat&type=manx 386 prefix = ""; 387 } else { 388 // deepObject style e.g. /pet?id[name]=cat&id[type]=manx 389 prefix = prefix + "["; 390 suffix = "]"; 391 containerSuffix = "]"; 392 containerPrefix = "["; 393 } 394 395 StringJoiner joiner = new StringJoiner("&"); 396 397 {{#allVars}} 398 // add `{{baseName}}` to the URL query string 399 {{#isArray}} 400 {{#items.isPrimitiveType}} 401 {{#uniqueItems}} 402 if ({{getter}}() != null) { 403 int i = 0; 404 for ({{{items.dataType}}} _item : {{getter}}()) { 405 try { 406 joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, 407 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), 408 URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); 409 } catch (UnsupportedEncodingException e) { 410 // Should never happen, UTF-8 is always supported 411 throw new RuntimeException(e); 412 } 413 } 414 i++; 415 } 416 {{/uniqueItems}} 417 {{^uniqueItems}} 418 if ({{getter}}() != null) { 419 for (int i = 0; i < {{getter}}().size(); i++) { 420 try { 421 joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, 422 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), 423 URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); 424 } catch (UnsupportedEncodingException e) { 425 // Should never happen, UTF-8 is always supported 426 throw new RuntimeException(e); 427 } 428 } 429 } 430 {{/uniqueItems}} 431 {{/items.isPrimitiveType}} 432 {{^items.isPrimitiveType}} 433 {{#items.isModel}} 434 {{#uniqueItems}} 435 if ({{getter}}() != null) { 436 int i = 0; 437 for ({{{items.dataType}}} _item : {{getter}}()) { 438 if (_item != null) { 439 joiner.add(_item.toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, 440 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); 441 } 442 } 443 i++; 444 } 445 {{/uniqueItems}} 446 {{^uniqueItems}} 447 if ({{getter}}() != null) { 448 for (int i = 0; i < {{getter}}().size(); i++) { 449 if ({{getter}}().get(i) != null) { 450 joiner.add({{getter}}().get(i).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, 451 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)))); 452 } 453 } 454 } 455 {{/uniqueItems}} 456 {{/items.isModel}} 457 {{^items.isModel}} 458 {{#uniqueItems}} 459 if ({{getter}}() != null) { 460 int i = 0; 461 for ({{{items.dataType}}} _item : {{getter}}()) { 462 if (_item != null) { 463 try { 464 joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, 465 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), 466 URLEncoder.encode(String.valueOf(_item), "UTF-8").replaceAll("\\+", "%20"))); 467 } catch (UnsupportedEncodingException e) { 468 // Should never happen, UTF-8 is always supported 469 throw new RuntimeException(e); 470 } 471 } 472 i++; 473 } 474 } 475 {{/uniqueItems}} 476 {{^uniqueItems}} 477 if ({{getter}}() != null) { 478 for (int i = 0; i < {{getter}}().size(); i++) { 479 if ({{getter}}().get(i) != null) { 480 try { 481 joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, 482 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix), 483 URLEncoder.encode(String.valueOf({{getter}}().get(i)), "UTF-8").replaceAll("\\+", "%20"))); 484 } catch (UnsupportedEncodingException e) { 485 // Should never happen, UTF-8 is always supported 486 throw new RuntimeException(e); 487 } 488 } 489 } 490 } 491 {{/uniqueItems}} 492 {{/items.isModel}} 493 {{/items.isPrimitiveType}} 494 {{/isArray}} 495 {{^isArray}} 496 {{#isMap}} 497 {{^items.isModel}} 498 if ({{getter}}() != null) { 499 for (String _key : {{getter}}().keySet()) { 500 try { 501 joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix, 502 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix), 503 {{getter}}().get(_key), URLEncoder.encode(String.valueOf({{getter}}().get(_key)), "UTF-8").replaceAll("\\+", "%20"))); 504 } catch (UnsupportedEncodingException e) { 505 // Should never happen, UTF-8 is always supported 506 throw new RuntimeException(e); 507 } 508 } 509 } 510 {{/items.isModel}} 511 {{#items.isModel}} 512 if ({{getter}}() != null) { 513 for (String _key : {{getter}}().keySet()) { 514 if ({{getter}}().get(_key) != null) { 515 joiner.add({{getter}}().get(_key).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix, 516 "".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix)))); 517 } 518 } 519 } 520 {{/items.isModel}} 521 {{/isMap}} 522 {{^isMap}} 523 {{#isPrimitiveType}} 524 if ({{getter}}() != null) { 525 try { 526 joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); 527 } catch (UnsupportedEncodingException e) { 528 // Should never happen, UTF-8 is always supported 529 throw new RuntimeException(e); 530 } 531 } 532 {{/isPrimitiveType}} 533 {{^isPrimitiveType}} 534 {{#isModel}} 535 if ({{getter}}() != null) { 536 joiner.add({{getter}}().toUrlQueryString(prefix + "{{{baseName}}}" + suffix)); 537 } 538 {{/isModel}} 539 {{^isModel}} 540 if ({{getter}}() != null) { 541 try { 542 joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), "UTF-8").replaceAll("\\+", "%20"))); 543 } catch (UnsupportedEncodingException e) { 544 // Should never happen, UTF-8 is always supported 545 throw new RuntimeException(e); 546 } 547 } 548 {{/isModel}} 549 {{/isPrimitiveType}} 550 {{/isMap}} 551 {{/isArray}} 552 553 {{/allVars}} 554 return joiner.toString(); 555 } 556 {{/supportUrlQuery}} 557 {{#parcelableModel}} 558 559 public void writeToParcel(Parcel out, int flags) { 560 {{#model}} 561 {{#isArray}} 562 out.writeList(this); 563 {{/isArray}} 564 {{^isArray}} 565 {{#parent}} 566 super.writeToParcel(out, flags); 567 {{/parent}} 568 {{#vars}} 569 out.writeValue({{name}}); 570 {{/vars}} 571 {{/isArray}} 572 {{/model}} 573 } 574 575 {{classname}}(Parcel in) { 576 {{#isArray}} 577 in.readTypedList(this, {{arrayModelType}}.CREATOR); 578 {{/isArray}} 579 {{^isArray}} 580 {{#parent}} 581 super(in); 582 {{/parent}} 583 {{#vars}} 584 {{#isPrimitiveType}} 585 {{name}} = ({{{datatypeWithEnum}}})in.readValue(null); 586 {{/isPrimitiveType}} 587 {{^isPrimitiveType}} 588 {{name}} = ({{{datatypeWithEnum}}})in.readValue({{complexType}}.class.getClassLoader()); 589 {{/isPrimitiveType}} 590 {{/vars}} 591 {{/isArray}} 592 } 593 594 public int describeContents() { 595 return 0; 596 } 597 598 public static final Parcelable.Creator<{{classname}}> CREATOR = new Parcelable.Creator<{{classname}}>() { 599 public {{classname}} createFromParcel(Parcel in) { 600 {{#model}} 601 {{#isArray}} 602 {{classname}} result = new {{classname}}(); 603 result.addAll(in.readArrayList({{arrayModelType}}.class.getClassLoader())); 604 return result; 605 {{/isArray}} 606 {{^isArray}} 607 return new {{classname}}(in); 608 {{/isArray}} 609 {{/model}} 610 } 611 public {{classname}}[] newArray(int size) { 612 return new {{classname}}[size]; 613 } 614 }; 615 {{/parcelableModel}} 616 617 }