|
23 | 23 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
24 | 24 | import com.fasterxml.jackson.core.Version; |
25 | 25 | import com.fasterxml.jackson.databind.PropertyName; |
| 26 | +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; |
26 | 27 | import com.fasterxml.jackson.databind.cfg.MapperConfig; |
27 | 28 | import com.fasterxml.jackson.databind.introspect.*; |
28 | 29 | import com.fasterxml.jackson.module.blackbird.util.CheckedFunction; |
29 | 30 | import com.regnosys.rosetta.common.serialisation.BackwardsCompatibleAnnotationIntrospector; |
30 | 31 | import com.regnosys.rosetta.common.serialisation.BeanUtil; |
31 | 32 | import com.regnosys.rosetta.common.serialisation.mixin.legacy.LegacyRosettaBuilderIntrospector; |
32 | 33 | import com.rosetta.model.lib.RosettaModelObject; |
33 | | -import com.rosetta.model.lib.annotations.RosettaAttribute; |
34 | | -import com.rosetta.model.lib.annotations.RosettaDataType; |
35 | | -import com.rosetta.model.lib.annotations.RosettaIgnore; |
| 34 | +import com.rosetta.model.lib.annotations.*; |
36 | 35 |
|
37 | 36 | import java.lang.reflect.Method; |
38 | 37 | import java.util.*; |
@@ -68,6 +67,14 @@ public Class<?> findPOJOBuilder(AnnotatedClass ac) { |
68 | 67 | .orElse(super.findPOJOBuilder(ac)); |
69 | 68 | } |
70 | 69 |
|
| 70 | + @Override |
| 71 | + public JsonPOJOBuilder.Value findPOJOBuilderConfig(AnnotatedClass ac) { |
| 72 | + if (ac.hasAnnotation(RosettaDataType.class)) { |
| 73 | + return new JsonPOJOBuilder.Value("build", "set"); |
| 74 | + } |
| 75 | + return super.findPOJOBuilderConfig(ac); |
| 76 | + } |
| 77 | + |
71 | 78 | @Override |
72 | 79 | public PropertyName findNameForSerialization(Annotated a) { |
73 | 80 | if (a.hasAnnotation(RosettaAttribute.class)) { |
@@ -116,15 +123,23 @@ public JsonIgnoreProperties.Value findPropertyIgnoralByName(MapperConfig<?> conf |
116 | 123 | public JsonIgnoreProperties.Value findPropertyIgnorals(Annotated ac) { |
117 | 124 | if (ac instanceof AnnotatedClass && ac.hasAnnotation(RosettaDataType.class)) { |
118 | 125 | AnnotatedClass acc = (AnnotatedClass) ac; |
119 | | - Set<String> includes = getPropertyNames(acc, x -> x.hasAnnotation(RosettaAttribute.class)); |
120 | | - Set<String> ignored = getPropertyNames(acc, x -> !x.hasAnnotation(RosettaAttribute.class)); |
| 126 | + Set<String> includes = getPropertyNames(acc, x -> shouldIncludeMethod(x)); |
| 127 | + Set<String> ignored = getPropertyNames(acc, x -> !shouldIncludeMethod(x)); |
121 | 128 | ignored.removeAll(includes); |
122 | 129 | return JsonIgnoreProperties.Value.forIgnoredProperties(ignored).withAllowSetters(); |
123 | 130 | } |
124 | 131 |
|
125 | 132 | return legacyRosettaBuilderIntrospector.findPropertyIgnorals(ac) |
126 | 133 | .orElse(JsonIgnoreProperties.Value.empty()); |
127 | 134 | } |
| 135 | + |
| 136 | + private boolean shouldIncludeMethod(AnnotatedMethod m) { |
| 137 | + return m.hasAnnotation(RosettaAttribute.class) && getAccessorType(m) != AccessorType.ADDER; |
| 138 | + } |
| 139 | + private AccessorType getAccessorType(Annotated m) { |
| 140 | + Accessor acc = m.getAnnotation(Accessor.class); |
| 141 | + return acc != null ? acc.value() : null; |
| 142 | + } |
128 | 143 |
|
129 | 144 | private static Set<String> getPropertyNames(AnnotatedClass acc, Predicate<AnnotatedMethod> filter) { |
130 | 145 | return StreamSupport.stream(acc.memberMethods().spliterator(), false) |
|
0 commit comments