|
16 | 16 | package io.serverlessworkflow.generator; |
17 | 17 |
|
18 | 18 | import com.fasterxml.jackson.databind.JsonNode; |
19 | | -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; |
20 | | -import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
21 | 19 | import com.fasterxml.jackson.databind.node.ArrayNode; |
| 20 | +import com.sun.codemodel.JAnnotationArrayMember; |
22 | 21 | import com.sun.codemodel.JBlock; |
23 | 22 | import com.sun.codemodel.JClass; |
24 | 23 | import com.sun.codemodel.JClassAlreadyExistsException; |
|
33 | 32 | import com.sun.codemodel.JPackage; |
34 | 33 | import com.sun.codemodel.JType; |
35 | 34 | import com.sun.codemodel.JVar; |
| 35 | +import io.serverlessworkflow.annotations.OneOfSetter; |
| 36 | +import io.serverlessworkflow.annotations.OneOfValueProvider; |
| 37 | +import io.serverlessworkflow.annotations.Union; |
36 | 38 | import jakarta.validation.ConstraintViolationException; |
37 | 39 | import java.io.UnsupportedEncodingException; |
38 | 40 | import java.net.URI; |
@@ -316,28 +318,11 @@ private JDefinedClass populateOneOf( |
316 | 318 | commonType.orElse(definedClass.owner().ref(Object.class)), |
317 | 319 | ruleFactory.getNameHelper().getPropertyName("value", null), |
318 | 320 | null); |
319 | | - |
320 | 321 | definedClass._implements( |
321 | | - definedClass |
322 | | - .owner() |
323 | | - .ref(GeneratorUtils.ONE_OF_VALUE_PROVIDER_INTERFACE_NAME) |
324 | | - .narrow(valueField.type())); |
| 322 | + definedClass.owner().ref(OneOfValueProvider.class).narrow(valueField.type())); |
325 | 323 | GeneratorUtils.implementInterface(definedClass, valueField); |
326 | | - try { |
327 | | - JDefinedClass serializer = generateSerializer(definedClass); |
328 | | - definedClass.annotate(JsonSerialize.class).param("using", serializer); |
329 | | - } catch (JClassAlreadyExistsException ex) { |
330 | | - // already serialized aware |
331 | | - } |
332 | | - |
333 | | - try { |
334 | | - JDefinedClass deserializer = |
335 | | - generateDeserializer(definedClass, oneOfTypes, "deserializeOneOf"); |
336 | | - definedClass.annotate(JsonDeserialize.class).param("using", deserializer); |
337 | | - } catch (JClassAlreadyExistsException ex) { |
338 | | - // already deserialized aware |
339 | | - } |
340 | | - |
| 324 | + JAnnotationArrayMember unionAnnotation = definedClass.annotate(Union.class).paramArray("value"); |
| 325 | + oneOfTypes.forEach(t -> unionAnnotation.param(t.getType())); |
341 | 326 | return wrapAll(parentSchema, definedClass, commonType, oneOfTypes, Optional.of(valueField)); |
342 | 327 | } |
343 | 328 |
|
@@ -388,51 +373,6 @@ private static boolean isStringType(JType type) { |
388 | 373 | return type.name().equals("String"); |
389 | 374 | } |
390 | 375 |
|
391 | | - private JDefinedClass generateSerializer(JDefinedClass relatedClass) |
392 | | - throws JClassAlreadyExistsException { |
393 | | - JDefinedClass definedClass = GeneratorUtils.serializerClass(relatedClass); |
394 | | - GeneratorUtils.fillSerializer( |
395 | | - definedClass, |
396 | | - relatedClass, |
397 | | - (method, valueParam, genParam) -> |
398 | | - method |
399 | | - .body() |
400 | | - .staticInvoke( |
401 | | - definedClass.owner().ref(GeneratorUtils.SERIALIZE_HELPER_NAME), |
402 | | - "serializeOneOf") |
403 | | - .arg(genParam) |
404 | | - .arg(valueParam)); |
405 | | - return definedClass; |
406 | | - } |
407 | | - |
408 | | - private JDefinedClass generateDeserializer( |
409 | | - JDefinedClass relatedClass, Collection<JTypeWrapper> oneOfTypes, String methodName) |
410 | | - throws JClassAlreadyExistsException { |
411 | | - JDefinedClass definedClass = GeneratorUtils.deserializerClass(relatedClass); |
412 | | - GeneratorUtils.fillDeserializer( |
413 | | - definedClass, |
414 | | - relatedClass, |
415 | | - (method, parserParam) -> { |
416 | | - JBlock body = method.body(); |
417 | | - |
418 | | - body._return( |
419 | | - definedClass |
420 | | - .owner() |
421 | | - .ref(GeneratorUtils.DESERIALIZE_HELPER_NAME) |
422 | | - .staticInvoke(methodName) |
423 | | - .arg(parserParam) |
424 | | - .arg(relatedClass.dotclass()) |
425 | | - .arg(list(definedClass, oneOfTypes))); |
426 | | - }); |
427 | | - return definedClass; |
428 | | - } |
429 | | - |
430 | | - private JInvocation list(JDefinedClass definedClass, Collection<JTypeWrapper> list) { |
431 | | - JInvocation result = definedClass.owner().ref(List.class).staticInvoke("of"); |
432 | | - list.forEach(c -> result.arg(((JClass) c.getType()).dotclass())); |
433 | | - return result; |
434 | | - } |
435 | | - |
436 | 376 | private void wrapIt( |
437 | 377 | Schema parentSchema, |
438 | 378 | JDefinedClass definedClass, |
@@ -460,7 +400,7 @@ private JVar setupMethod( |
460 | 400 | v -> { |
461 | 401 | method.body().assign(JExpr._this().ref(v), methodParam); |
462 | 402 | method |
463 | | - .annotate(definedClass.owner().ref(GeneratorUtils.SETTER_ANNOTATION_NAME)) |
| 403 | + .annotate(definedClass.owner().ref(OneOfSetter.class)) |
464 | 404 | .param("value", instanceField.type()); |
465 | 405 | }); |
466 | 406 | return methodParam; |
|
0 commit comments