11package io .vertx .codegen .json .generator ;
22
33import io .vertx .codegen .processor .DataObjectModel ;
4- import io .vertx .codegen .processor .GenException ;
54import io .vertx .codegen .processor .Generator ;
65import io .vertx .codegen .processor .PropertyInfo ;
76import io .vertx .codegen .annotations .DataObject ;
2322import java .io .PrintWriter ;
2423import java .io .StringWriter ;
2524import java .lang .annotation .Annotation ;
25+ import java .time .Duration ;
2626import java .time .Instant ;
2727import java .util .Collection ;
2828import java .util .Collections ;
@@ -94,8 +94,6 @@ public String renderJson(DataObjectModel model) {
9494 writer .print ("\n " );
9595 writer .print ("import io.vertx.core.json.JsonObject;\n " );
9696 writer .print ("import io.vertx.core.json.JsonArray;\n " );
97- writer .print ("import java.time.Instant;\n " );
98- writer .print ("import java.time.format.DateTimeFormatter;\n " );
9997 writer .print ("\n " );
10098 writer .print ("/**\n " );
10199 writer .print (" * Converter and mapper for {@link " + model .getType () + "}.\n " );
@@ -122,59 +120,65 @@ private void genToJson(String visibility, boolean inheritConverter, DataObjectMo
122120 writer .print ("\n " );
123121 writer .print (" " + visibility + " static void toJson(" + simpleName + " obj, java.util.Map<String, Object> json) {\n " );
124122 model_ .getPropertyMap ().values ().forEach (prop -> {
125- if ((prop .isDeclared () || inheritConverter ) && prop .getGetterMethod () != null && prop .isJsonifiable ()) {
126- ClassKind propKind = prop .getType ().getKind ();
127- if (propKind .basic ) {
128- if (propKind == ClassKind .STRING ) {
129- genPropToJson ("" , "" , prop , writer );
130- } else {
131- switch (prop .getType ().getSimpleName ()) {
132- case "char" :
133- case "Character" :
134- genPropToJson ("Character.toString(" , ")" , prop , writer );
135- break ;
136- default :
137- genPropToJson ("" , "" , prop , writer );
138- }
139- }
140- } else {
141- DataObjectInfo dataObject = prop .getType ().getDataObject ();
142- if (dataObject != null ) {
143- if (dataObject .isSerializable ()) {
144- String m ;
145- MapperInfo mapperInfo = dataObject .getSerializer ();
146- String match ;
147- switch (mapperInfo .getKind ()) {
148- case SELF :
149- m = "" ;
150- match = "." + String .join ("." , mapperInfo .getSelectors ()) + "()" ;
151- break ;
152- case STATIC_METHOD :
153- m = mapperInfo .getQualifiedName () + "." + String .join ("." , mapperInfo .getSelectors ()) + "(" ;
154- match = ")" ;
123+ if ((prop .isDeclared () || inheritConverter ) && prop .getGetterMethod () != null ) {
124+ if (prop .isJsonifiable ()) {
125+ ClassKind propKind = prop .getType ().getKind ();
126+ if (propKind .basic ) {
127+ if (propKind == ClassKind .STRING ) {
128+ genPropToJson ("" , "" , prop , writer );
129+ } else {
130+ switch (prop .getType ().getSimpleName ()) {
131+ case "char" :
132+ case "Character" :
133+ genPropToJson ("Character.toString(" , ")" , prop , writer );
155134 break ;
156135 default :
157- throw new UnsupportedOperationException ( );
136+ genPropToJson ( "" , "" , prop , writer );
158137 }
159- genPropToJson (m , match , prop , writer );
160138 }
161139 } else {
162- switch (propKind ) {
163- case ENUM :
164- genPropToJson ("" , ".name()" , prop , writer );
165- break ;
166- case JSON_OBJECT :
167- case JSON_ARRAY :
168- case OBJECT :
169- genPropToJson ("" , "" , prop , writer );
170- break ;
171- case OTHER :
172- if (prop .getType ().getName ().equals (Instant .class .getName ())) {
173- genPropToJson ("DateTimeFormatter.ISO_INSTANT.format(" , ")" , prop , writer );
140+ DataObjectInfo dataObject = prop .getType ().getDataObject ();
141+ if (dataObject != null ) {
142+ if (dataObject .isSerializable ()) {
143+ String m ;
144+ MapperInfo mapperInfo = dataObject .getSerializer ();
145+ String match ;
146+ switch (mapperInfo .getKind ()) {
147+ case SELF :
148+ m = "" ;
149+ match = "." + String .join ("." , mapperInfo .getSelectors ()) + "()" ;
150+ break ;
151+ case STATIC_METHOD :
152+ m = mapperInfo .getQualifiedName () + "." + String .join ("." , mapperInfo .getSelectors ()) + "(" ;
153+ match = ")" ;
154+ break ;
155+ default :
156+ throw new UnsupportedOperationException ();
174157 }
175- break ;
158+ genPropToJson (m , match , prop , writer );
159+ }
160+ } else {
161+ switch (propKind ) {
162+ case ENUM :
163+ genPropToJson ("" , ".name()" , prop , writer );
164+ break ;
165+ case JSON_OBJECT :
166+ case JSON_ARRAY :
167+ case OBJECT :
168+ genPropToJson ("" , "" , prop , writer );
169+ break ;
170+ case OTHER :
171+ if (prop .getType ().getName ().equals (Instant .class .getName ())) {
172+ genPropToJson ("java.time.format.DateTimeFormatter.ISO_INSTANT.format(" , ")" , prop , writer );
173+ }
174+ break ;
175+ }
176176 }
177177 }
178+ } else {
179+ if (prop .getType ().getName ().equals (Duration .class .getName ())) {
180+ genPropToJson ("" , ".toMillis()" , prop , writer );
181+ }
178182 }
179183 }
180184 });
@@ -302,7 +306,9 @@ private void genFromJson(String visibility, boolean inheritConverter, DataObject
302306 break ;
303307 case OTHER :
304308 if (prop .getType ().getName ().equals (Instant .class .getName ())) {
305- genPropFromJson ("String" , "Instant.from(DateTimeFormatter.ISO_INSTANT.parse((String)" , "))" , prop , writer );
309+ genPropFromJson ("String" , "java.time.Instant.from(java.time.format.DateTimeFormatter.ISO_INSTANT.parse((String)" , "))" , prop , writer );
310+ } else if (prop .getType ().getName ().equals (Duration .class .getName ())) {
311+ genPropFromJson ("Number" , "java.time.Duration.of(((Number)" , ").longValue(), java.time.temporal.ChronoUnit.MILLIS)" , prop , writer );
306312 }
307313 break ;
308314 default :
0 commit comments