diff --git a/src/main/java/org/killbill/billing/codegen/languages/KillbillJavaGenerator.java b/src/main/java/org/killbill/billing/codegen/languages/KillbillJavaGenerator.java index 26ab24f..6ae1b27 100644 --- a/src/main/java/org/killbill/billing/codegen/languages/KillbillJavaGenerator.java +++ b/src/main/java/org/killbill/billing/codegen/languages/KillbillJavaGenerator.java @@ -117,6 +117,8 @@ public void processOpts() { typeMapping.put("array", "List"); typeMapping.put("map", "Map"); + typeMapping.put("date", "LocalDate"); + typeMapping.put("DateTime", "ZonedDateTime"); typeMapping.put("file", "java.io.File"); @@ -128,8 +130,8 @@ public void processOpts() { importMapping.put("List", "java.util.List"); importMapping.put("LinkedList", "java.util.LinkedList"); importMapping.put("ArrayList", "java.util.ArrayList"); - importMapping.put("DateTime", "org.joda.time.DateTime"); - importMapping.put("LocalDate", "org.joda.time.LocalDate"); + importMapping.put("ZonedDateTime", "java.time.ZonedDateTime"); + importMapping.put("LocalDate", "java.time.LocalDate"); importMapping.put("BigDecimal", "java.math.BigDecimal"); importMapping.put("HashMap", "java.util.HashMap"); importMapping.put("Map", "java.util.Map"); @@ -217,17 +219,18 @@ public Map postProcessOperations(Map objs) { addAllImportsIfRequired(ext, imports); convertToExtendedCodegenParam(ext, imports); if (shouldAddDateTimeMethod(op)) { - addImportIfRequired(imports, "org.joda.time.DateTime"); - addImportIfRequired(imports, "org.joda.time.LocalDate"); + addImportIfRequired(imports, "java.time.ZonedDateTime"); + addImportIfRequired(imports, "java.time.LocalDate"); final ExtendedCodegenOperation ext2 = new ExtendedCodegenOperation(op); addAllImportsIfRequired(ext2, imports); - List allParams = ext2.allParams; - for (CodegenParameter parameter : allParams) { - if (isDateParameter(parameter)) { - parameter.dataFormat = "date-time"; - parameter.isDate = false; - parameter.isDateTime = true; - parameter.dataType = "DateTime"; + for (List paramList : Arrays.asList(ext2.allParams, ext2.queryParams)) { + for (CodegenParameter parameter : paramList) { + if (isDateParameter(parameter)) { + parameter.dataFormat = "date-time"; + parameter.isDate = false; + parameter.isDateTime = true; + parameter.dataType = "ZonedDateTime"; + } } } convertToExtendedCodegenParam(ext2, imports); @@ -444,7 +447,12 @@ private ExtendedCodegenOperation(CodegenOperation o) { returnContainer.equals("array") && this.returnBaseType != null; if (isReturnModelRefContainer) { - this.returnType = String.format("%ss", this.returnBaseType); + // ZonedDateTime wrapper class is still called DateTimes (hand-maintained) + if ("ZonedDateTime".equals(this.returnBaseType)) { + this.returnType = "DateTimes"; + } else { + this.returnType = String.format("%ss", this.returnBaseType); + } } this.isStream = produces != null && !produces.isEmpty() && produces.get(0).get("mediaType").equals("application/octet-stream"); this.hasNonRequiredDefaultQueryParams = this.queryParams diff --git a/src/main/resources/killbill-java/api.mustache b/src/main/resources/killbill-java/api.mustache index f843ad4..53c9c90 100644 --- a/src/main/resources/killbill-java/api.mustache +++ b/src/main/resources/killbill-java/api.mustache @@ -7,6 +7,8 @@ import java.util.Objects; {{#imports}}import {{import}}; {{/imports}} +import java.time.format.DateTimeFormatter; + import org.killbill.billing.client.Converter; import org.killbill.billing.client.KillBillClientException; import org.killbill.billing.client.KillBillHttpClient; diff --git a/src/main/resources/killbill-java/api_query.mustache b/src/main/resources/killbill-java/api_query.mustache index fc7b471..2bb7e8b 100644 --- a/src/main/resources/killbill-java/api_query.mustache +++ b/src/main/resources/killbill-java/api_query.mustache @@ -29,7 +29,12 @@ {{/isMapContainer}} {{^isMapContainer}} if ({{paramName}} != null) { + {{#isDateTime}} + queryParams.put("{{baseName}}", DateTimeFormatter.ISO_OFFSET_DATE_TIME.format({{paramName}})); + {{/isDateTime}} + {{^isDateTime}} queryParams.put("{{baseName}}", String.valueOf({{paramName}})); + {{/isDateTime}} } {{/isMapContainer}} {{/isListContainer}}