3
3
import org .apache .poi .ss .usermodel .Sheet ;
4
4
import org .finos .waltz .common .Columns ;
5
5
import org .finos .waltz .common .MapUtilities ;
6
+ import org .finos .waltz .model .EntityKind ;
6
7
import org .finos .waltz .model .Nullable ;
8
+ import org .finos .waltz .model .assessment_definition .AssessmentVisibility ;
9
+ import org .finos .waltz .schema .tables .records .AssessmentDefinitionRecord ;
10
+ import org .finos .waltz .schema .tables .records .RatingSchemeItemRecord ;
11
+ import org .finos .waltz .schema .tables .records .RatingSchemeRecord ;
7
12
import org .immutables .value .Value ;
8
13
import org .jooq .DSLContext ;
9
- import org .jooq .lambda .tuple .Tuple2 ;
14
+ import org .jooq .lambda .tuple .Tuple3 ;
10
15
11
16
import java .sql .Timestamp ;
12
17
import java .util .Collection ;
13
18
import java .util .Map ;
14
19
import java .util .Set ;
15
- import java .util .stream .Collectors ;
16
- import java .util .stream .Stream ;
20
+ import java .util .concurrent .atomic .AtomicInteger ;
17
21
import java .util .stream .StreamSupport ;
18
22
19
- import static org .finos .waltz .jobs .example .demodata .DemoUtils .numberVal ;
20
- import static org .finos .waltz .jobs .example .demodata .DemoUtils .strVal ;
23
+ import static java .lang .String .format ;
24
+ import static java .util .stream .Collectors .collectingAndThen ;
25
+ import static java .util .stream .Collectors .toSet ;
26
+ import static org .finos .waltz .jobs .example .demodata .DemoUtils .*;
27
+ import static org .finos .waltz .schema .Tables .ASSESSMENT_DEFINITION ;
21
28
import static org .jooq .lambda .tuple .Tuple .tuple ;
22
29
23
30
public class AppToAssessmentLoader {
@@ -33,15 +40,24 @@ interface AssessmentRow {
33
40
@ Nullable
34
41
String ratingColor ();
35
42
int weighting ();
43
+
44
+ default String assessmentExtId () {
45
+ return toExtId (assessmentName ());
46
+ }
47
+
48
+ default String ratingExtId () {
49
+ return toExtId (assessmentName ());
50
+ }
36
51
}
37
52
53
+
38
54
public static void process (DSLContext waltz , Sheet sheet , Timestamp now ) {
39
- Set <ImmutableAssessmentRow > configRows = StreamSupport
55
+ Set <AssessmentRow > configRows = StreamSupport
40
56
.stream (sheet .spliterator (), false )
41
57
.skip (1 )
42
58
.map (r -> {
43
59
String ratingName = strVal (r , Columns .C );
44
- boolean isUnmapped = ratingName . equals ( "n/a" );
60
+ boolean isUnmapped = "n/a" . equals ( ratingName );
45
61
return ImmutableAssessmentRow
46
62
.builder ()
47
63
.assessmentGroup (strVal (r , Columns .A ))
@@ -52,21 +68,77 @@ public static void process(DSLContext waltz, Sheet sheet, Timestamp now) {
52
68
.weighting (numberVal (r , Columns .F ).intValue ())
53
69
.build ();
54
70
})
55
- .collect (Collectors . toSet ());
71
+ .collect (toSet ());
56
72
57
- Map <Tuple2 <String , String >, Collection <ImmutableAssessmentRow >> byDef = MapUtilities .groupBy (
73
+ Map <Tuple3 <String , String , String >, Collection <AssessmentRow >> byDef = MapUtilities
74
+ .groupBy (
58
75
configRows ,
59
- r -> tuple (r .assessmentGroup (), r .assessmentName ()));
76
+ r -> tuple (
77
+ r .assessmentGroup (),
78
+ r .assessmentName (),
79
+ r .assessmentExtId ()));
60
80
61
- byDef .keySet ().stream ().map (entry -> )
62
- byDef .entrySet ()
63
- .stream ()
64
- .flatMap (kv -> {
65
- Tuple2 <String , String > scheme = kv .getKey ();
66
- Collection <ImmutableAssessmentRow > ratings = kv .getValue ();
67
- return Stream .concat (Stream .of (waltz .newRecord ()))
81
+ byDef
82
+ .keySet ()
83
+ .stream ()
84
+ .map (t -> {
85
+ RatingSchemeRecord r = waltz .newRecord (rs );
86
+ r .setName (t .v2 );
87
+ r .setDescription (format ("Rating Scheme: %s / %s" , t .v1 , t .v2 ));
88
+ r .setExternalId (toExtId (t .v3 ));
89
+ return r ;
90
+ })
91
+ .collect (collectingAndThen (toSet (), waltz ::batchInsert ))
92
+ .execute ();
68
93
69
- })
94
+ Map <String , Long > rsByExtIt = waltz
95
+ .select (rs .ID , rs .EXTERNAL_ID )
96
+ .from (rs )
97
+ .fetchMap (rs .EXTERNAL_ID , rs .ID );
98
+
99
+ byDef
100
+ .entrySet ()
101
+ .stream ()
102
+ .flatMap (kv -> {
103
+ Long rsId = rsByExtIt .get (kv .getKey ().v3 );
104
+ AtomicInteger ctr = new AtomicInteger (1 );
105
+ return kv
106
+ .getValue ()
107
+ .stream ()
108
+ .map (d -> tuple (rsId , d , ctr .getAndIncrement ()));
109
+ })
110
+ .map (t -> {
111
+ RatingSchemeItemRecord r = waltz .newRecord (rsi );
112
+ r .setSchemeId (t .v1 );
113
+ r .setName (t .v2 .ratingName ());
114
+ r .setColor (t .v2 .ratingColor ());
115
+ r .setCode (t .v3 .toString ());
116
+ r .setExternalId (t .v2 .ratingExtId ());
117
+ r .setDescription (t .v2 .ratingDescription ());
118
+ return r ;
119
+ })
120
+ .collect (collectingAndThen (toSet (), waltz ::batchInsert ))
121
+ .execute ();
122
+
123
+ byDef
124
+ .keySet ()
125
+ .stream ()
126
+ .map (t -> {
127
+ AssessmentDefinitionRecord r = waltz .newRecord (ASSESSMENT_DEFINITION );
128
+ r .setDefinitionGroup (t .v1 );
129
+ r .setName (t .v2 );
130
+ r .setDescription (format ("Assessment: %s / %s" , t .v1 , t .v2 ));
131
+ r .setEntityKind (EntityKind .APPLICATION .name ());
132
+ r .setExternalId (toExtId (t .v2 ));
133
+ r .setProvenance (PROVENANCE );
134
+ r .setLastUpdatedAt (now );
135
+ r .setLastUpdatedBy (USER_ID );
136
+ r .setRatingSchemeId (rsByExtIt .get (t .v3 ));
137
+ r .setVisibility (AssessmentVisibility .PRIMARY .name ());
138
+ return r ;
139
+ })
140
+ .collect (collectingAndThen (toSet (), waltz ::batchInsert ))
141
+ .execute ();
70
142
71
143
72
144
System .out .println (configRows );
0 commit comments