Skip to content

Commit c674ad6

Browse files
1 parent 14d7d45 commit c674ad6

File tree

3 files changed

+102
-18
lines changed

3 files changed

+102
-18
lines changed

waltz-jobs/src/main/java/org/finos/waltz/jobs/example/demodata/DemoUtils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,16 @@ public static Map<String, Long> fetchDataTypeExtIdToIdMap(DSLContext waltz) {
7070
.fetchMap(dt.CODE, dt.ID);
7171
}
7272

73+
74+
public static String toExtId(String str) {
75+
return str
76+
.toLowerCase()
77+
.replace(" ", "_")
78+
.replace("\"", "")
79+
.replace("\'", "")
80+
.replace("(", "")
81+
.replace(")", "")
82+
.replace("\t", " ");
83+
}
84+
7385
}

waltz-jobs/src/main/java/org/finos/waltz/jobs/example/demodata/loaders/AppToAssessmentLoader.java

Lines changed: 90 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,28 @@
33
import org.apache.poi.ss.usermodel.Sheet;
44
import org.finos.waltz.common.Columns;
55
import org.finos.waltz.common.MapUtilities;
6+
import org.finos.waltz.model.EntityKind;
67
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;
712
import org.immutables.value.Value;
813
import org.jooq.DSLContext;
9-
import org.jooq.lambda.tuple.Tuple2;
14+
import org.jooq.lambda.tuple.Tuple3;
1015

1116
import java.sql.Timestamp;
1217
import java.util.Collection;
1318
import java.util.Map;
1419
import java.util.Set;
15-
import java.util.stream.Collectors;
16-
import java.util.stream.Stream;
20+
import java.util.concurrent.atomic.AtomicInteger;
1721
import java.util.stream.StreamSupport;
1822

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;
2128
import static org.jooq.lambda.tuple.Tuple.tuple;
2229

2330
public class AppToAssessmentLoader {
@@ -33,15 +40,24 @@ interface AssessmentRow {
3340
@Nullable
3441
String ratingColor();
3542
int weighting();
43+
44+
default String assessmentExtId() {
45+
return toExtId(assessmentName());
46+
}
47+
48+
default String ratingExtId() {
49+
return toExtId(assessmentName());
50+
}
3651
}
3752

53+
3854
public static void process(DSLContext waltz, Sheet sheet, Timestamp now) {
39-
Set<ImmutableAssessmentRow> configRows = StreamSupport
55+
Set<AssessmentRow> configRows = StreamSupport
4056
.stream(sheet.spliterator(), false)
4157
.skip(1)
4258
.map(r -> {
4359
String ratingName = strVal(r, Columns.C);
44-
boolean isUnmapped = ratingName.equals("n/a");
60+
boolean isUnmapped = "n/a".equals(ratingName);
4561
return ImmutableAssessmentRow
4662
.builder()
4763
.assessmentGroup(strVal(r, Columns.A))
@@ -52,21 +68,77 @@ public static void process(DSLContext waltz, Sheet sheet, Timestamp now) {
5268
.weighting(numberVal(r, Columns.F).intValue())
5369
.build();
5470
})
55-
.collect(Collectors.toSet());
71+
.collect(toSet());
5672

57-
Map<Tuple2<String, String>, Collection<ImmutableAssessmentRow>> byDef = MapUtilities.groupBy(
73+
Map<Tuple3<String, String, String>, Collection<AssessmentRow>> byDef = MapUtilities
74+
.groupBy(
5875
configRows,
59-
r -> tuple(r.assessmentGroup(), r.assessmentName()));
76+
r -> tuple(
77+
r.assessmentGroup(),
78+
r.assessmentName(),
79+
r.assessmentExtId()));
6080

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();
6893

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();
70142

71143

72144
System.out.println(configRows);
Binary file not shown.

0 commit comments

Comments
 (0)