@@ -14,8 +14,10 @@ import dev.krud.shapeshift.MappingStrategy
14
14
import dev.krud.shapeshift.condition.MappingCondition
15
15
import dev.krud.shapeshift.dto.ResolvedMappedField
16
16
import dev.krud.shapeshift.dto.TransformerCoordinates
17
+ import dev.krud.shapeshift.enums.AutoMappingStrategy
17
18
import dev.krud.shapeshift.resolver.MappingDefinition
18
19
import dev.krud.shapeshift.transformer.base.MappingTransformer
20
+ import dev.krud.shapeshift.util.getAutoMappings
19
21
import dev.krud.shapeshift.util.getDeclaredFieldRecursive
20
22
import java.lang.reflect.Field
21
23
@@ -24,6 +26,22 @@ import java.lang.reflect.Field
24
26
*/
25
27
class MappingDefinitionBuilder (val fromClazz : Class <out Any >, val toClazz : Class <out Any >) {
26
28
private val resolvedMappedFields = mutableListOf<ResolvedMappedField >()
29
+ private var autoMappingStrategy: AutoMappingStrategy = AutoMappingStrategy .NONE
30
+
31
+ /* *
32
+ * Automatically map all fields with the given strategy
33
+ */
34
+ fun autoMap (strategy : AutoMappingStrategy ): MappingDefinitionBuilder {
35
+ this .autoMappingStrategy = strategy
36
+ return this
37
+ }
38
+
39
+ /* *
40
+ * Automatically map all fields with the given strategy with strategy [AutoMappingStrategy.BY_NAME_AND_TYPE]
41
+ */
42
+ fun autoMap (): MappingDefinitionBuilder {
43
+ return autoMap(AutoMappingStrategy .BY_NAME_AND_TYPE )
44
+ }
27
45
28
46
/* *
29
47
* Define a new mapped field, along with an optional condition, transformer and override mapping strategy
@@ -40,10 +58,16 @@ class MappingDefinitionBuilder(val fromClazz: Class<out Any>, val toClazz: Class
40
58
* Return a mapping definition for the fields defined in this builder
41
59
*/
42
60
fun build (): MappingDefinition {
61
+ val autoMappedFields = getAutoMappings(fromClazz, toClazz, autoMappingStrategy)
62
+ .filter { autoResolvedMappedField ->
63
+ resolvedMappedFields.none {
64
+ it.mapFromCoordinates.first() == autoResolvedMappedField.mapFromCoordinates.first() || it.mapToCoordinates.first() == autoResolvedMappedField.mapToCoordinates.first()
65
+ }
66
+ }
43
67
return MappingDefinition (
44
68
fromClazz,
45
69
toClazz,
46
- resolvedMappedFields
70
+ resolvedMappedFields + autoMappedFields
47
71
)
48
72
}
49
73
@@ -54,6 +78,22 @@ class MappingDefinitionBuilder(val fromClazz: Class<out Any>, val toClazz: Class
54
78
private var transformerCoordinates: TransformerCoordinates = TransformerCoordinates .NONE
55
79
private var mappingStrategy: MappingStrategy ? = null
56
80
81
+ /* *
82
+ * @see MappingDefinitionBuilder.autoMap
83
+ */
84
+ fun autoMap (strategy : AutoMappingStrategy ): MappingDefinitionBuilder {
85
+ buildAndAddSelf()
86
+ return this @MappingDefinitionBuilder.autoMap(strategy)
87
+ }
88
+
89
+ /* *
90
+ * @see MappingDefinitionBuilder.autoMap
91
+ */
92
+ fun autoMap (): MappingDefinitionBuilder {
93
+ buildAndAddSelf()
94
+ return this @MappingDefinitionBuilder.autoMap()
95
+ }
96
+
57
97
/* *
58
98
* @see MappingDefinitionBuilder.mapField
59
99
*/
0 commit comments