19
19
import io .github .pellse .assembler .RuleMapperContext .OneToManyContext ;
20
20
import io .github .pellse .assembler .RuleMapperContext .OneToOneContext ;
21
21
import io .github .pellse .assembler .caching .factory .CacheFactory .CacheTransformer ;
22
- import io .github .pellse .util .collection .CollectionUtils ;
23
22
import io .github .pellse .util .function .Function3 ;
24
23
25
- import java .util .Collection ;
26
- import java .util .Comparator ;
27
- import java .util .List ;
28
- import java .util .Map ;
24
+ import java .util .*;
29
25
import java .util .function .BiFunction ;
30
26
import java .util .function .Function ;
31
27
import java .util .function .IntFunction ;
@@ -40,82 +36,71 @@ public sealed interface CacheContext<ID, R, RRC, CTX extends CacheContext<ID, R,
40
36
41
37
IntFunction <Collector <R , ?, Map <ID , RRC >>> mapCollector ();
42
38
43
- BiFunction < Map < ID , RRC >, Map < ID , RRC >, Map < ID , RRC >> mapMerger ();
39
+ Function3 < ID , RRC , RRC , RRC > mergeFunction ();
44
40
45
41
CacheTransformer <ID , R , RRC , CTX > cacheTransformer ();
46
42
47
- record OneToOneCacheContext <ID , R , U >(
43
+ default BiFunction <Map <ID , RRC >, Map <ID , RRC >, Map <ID , RRC >> mapMerger () {
44
+ return (existingMap , newMap ) -> mergeMaps (existingMap , newMap , mergeFunction ());
45
+ }
46
+
47
+ record OneToOneCacheContext <ID , R >(
48
48
IntFunction <Collector <R , ?, Map <ID , R >>> mapCollector ,
49
- Function3 <ID , R , U , R > mergeFunction ,
50
- CacheTransformer <ID , R , R , OneToOneCacheContext <ID , R , U >> cacheTransformer ) implements CacheContext <ID , R , R , OneToOneCacheContext <ID , R , U >> {
49
+ Function3 <ID , R , R , R > mergeFunction ,
50
+ CacheTransformer <ID , R , R , OneToOneCacheContext <ID , R >> cacheTransformer ) implements CacheContext <ID , R , R , OneToOneCacheContext <ID , R >> {
51
51
52
- static <ID , R > OneToOneCacheContext <ID , R , R > oneToOneCacheContext (OneToOneContext <?, ?, ?, ID , R > ctx ) {
52
+ static <ID , R > OneToOneCacheContext <ID , R > oneToOneCacheContext (OneToOneContext <?, ?, ?, ID , R > ctx ) {
53
53
return oneToOneCacheContext (ctx , (k , r1 , r2 ) -> r2 != null ? r2 : r1 );
54
54
}
55
55
56
- static <ID , R > OneToOneCacheContext <ID , R , R > oneToOneCacheContext (OneToOneContext <?, ?, ?, ID , R > ctx , Function3 <ID , R , R , R > mergeFunction ) {
56
+ static <ID , R > OneToOneCacheContext <ID , R > oneToOneCacheContext (OneToOneContext <?, ?, ?, ID , R > ctx , Function3 <ID , R , R , R > mergeFunction ) {
57
57
return new OneToOneCacheContext <>(ctx .mapCollector (),
58
58
mergeFunction ,
59
- concurrent ());
60
- }
61
-
62
- public BiFunction <Map <ID , R >, Map <ID , U >, Map <ID , R >> mapMerger (Function3 <ID , R , U , R > mergeFunction ) {
63
- return (existingMap , newMap ) -> mergeMaps (existingMap , newMap , mergeFunction );
64
- }
65
-
66
- public BiFunction <Map <ID , R >, Map <ID , R >, Map <ID , R >> mapMerger () {
67
- return CollectionUtils ::mergeMaps ;
59
+ concurrent ());
68
60
}
69
61
}
70
62
71
- record OneToManyCacheContext <ID , EID , R , RC extends Collection <R >, U , UC extends Collection < U > > (
63
+ record OneToManyCacheContext <ID , EID , R , RC extends Collection <R >> (
72
64
Function <R , EID > idResolver ,
73
65
IntFunction <Collector <R , ?, Map <ID , RC >>> mapCollector ,
74
66
Comparator <R > idComparator ,
75
67
Supplier <RC > collectionFactory ,
76
68
Class <RC > collectionType ,
77
- Function3 <ID , RC , UC , RC > mergeFunction ,
78
- CacheTransformer <ID , R , RC , OneToManyCacheContext <ID , EID , R , RC , U , UC >> cacheTransformer ) implements CacheContext <ID , R , RC , OneToManyCacheContext <ID , EID , R , RC , U , UC >> {
69
+ Function3 <ID , RC , RC , RC > mergeFunction ,
70
+ CacheTransformer <ID , R , RC , OneToManyCacheContext <ID , EID , R , RC >> cacheTransformer ) implements CacheContext <ID , R , RC , OneToManyCacheContext <ID , EID , R , RC >> {
79
71
80
- static <ID , EID , R , RC extends Collection <R >> OneToManyCacheContext <ID , EID , R , RC , R , RC > oneToManyCacheContext (OneToManyContext <?, ?, ?, ID , EID , R , RC > ctx ) {
81
-
82
- return oneToManyCacheContext (
83
- ctx ,
84
- (k , coll1 , coll2 ) -> removeDuplicates (concat (coll1 , coll2 ), ctx .idResolver (), rc -> convert (rc , ctx .collectionType (), ctx .collectionFactory ())));
72
+ static <ID , EID , R , RC extends Collection <R >> OneToManyCacheContext <ID , EID , R , RC > oneToManyCacheContext (OneToManyContext <?, ?, ?, ID , EID , R , RC > ctx ) {
73
+ return oneToManyCacheContext (ctx , removeDuplicate (ctx ));
85
74
}
86
75
87
- static <ID , EID , R , RC extends Collection <R >, U , UC extends Collection < U >> OneToManyCacheContext <ID , EID , R , RC , U , UC > oneToManyCacheContext (
76
+ static <ID , EID , R , RC extends Collection <R >> OneToManyCacheContext <ID , EID , R , RC > oneToManyCacheContext (
88
77
OneToManyContext <?, ?, ?, ID , EID , R , RC > ctx ,
89
- Function3 <ID , RC , UC , RC > mergeFunction ) {
78
+ Function3 <ID , RC , RC , RC > mergeFunction ) {
90
79
91
80
return new OneToManyCacheContext <>(ctx .idResolver (),
92
81
ctx .mapCollector (),
93
82
ctx .idComparator (),
94
83
ctx .collectionFactory (),
95
84
ctx .collectionType (),
96
- mergeFunction ,
85
+ (id , coll1 , coll2 ) ->
86
+ isNotEmpty (coll1 ) || isNotEmpty (coll2 ) ? mergeFunction .apply (id , convert (coll1 , ctx ), convert (coll2 , ctx )) : convert (List .of (), ctx ),
97
87
concurrent ());
98
88
}
99
89
100
- BiFunction <Map <ID , RC >, Map <ID , Collection <U >>, Map <ID , RC >> mapMerger (Function3 <ID , RC , Collection <U >, RC > mergeFunction ) {
101
-
102
- Function3 <ID , RC , Collection <U >, RC > mappingFunction = (id , coll1 , coll2 ) ->
103
- isNotEmpty (coll1 ) || isNotEmpty (coll2 ) ? mergeFunction .apply (id , convert (coll1 ), asCollection (coll2 )) : convert (List .of ());
104
-
105
- return (existingMap , newMap ) -> mergeMaps (existingMap , newMap , mappingFunction );
90
+ private RC convert (Collection <R > collection ) {
91
+ return convert (collection , collectionType , collectionFactory );
106
92
}
107
93
108
- public BiFunction < Map < ID , RC >, Map <ID , RC >, Map < ID , RC >> mapMerger ( ) {
109
- return (existingMap , newMap ) -> mergeMaps ( existingMap , newMap , idResolver (), this :: convert );
94
+ private static < ID , EID , R , RC extends Collection < R >> Function3 <ID , RC , RC , RC > removeDuplicate ( OneToManyContext <?, ?, ?, ID , EID , R , RC > ctx ) {
95
+ return (id , coll1 , coll2 ) -> removeDuplicates ( concat ( coll1 , coll2 ), ctx . idResolver (), rc -> convert ( rc , ctx ) );
110
96
}
111
97
112
- @ SuppressWarnings ("unchecked" )
113
- private RC convert (Collection <R > collection ) {
114
- return collectionType ().isInstance (collection ) ? (RC ) collection : translate (collection , collectionFactory ());
98
+ private static <ID , EID , R , RC extends Collection <R >> RC convert (Collection <R > collection , OneToManyContext <?, ?, ?, ID , EID , R , RC > ctx ) {
99
+ return convert (collection , ctx .collectionType (), ctx .collectionFactory ());
115
100
}
116
101
117
102
@ SuppressWarnings ("unchecked" )
118
- public static <R , RC extends Collection <R >> RC convert (Collection <R > collection , Class <RC > collectionType , Supplier <RC > collectionFactory ) {
103
+ private static <R , RC extends Collection <R >> RC convert (Collection <R > collection , Class <RC > collectionType , Supplier <RC > collectionFactory ) {
119
104
return collectionType .isInstance (collection ) ? (RC ) collection : translate (collection , collectionFactory );
120
105
}
121
106
}
0 commit comments