Skip to content

Commit 57de732

Browse files
1 parent a8072b8 commit 57de732

File tree

14 files changed

+963
-555
lines changed

14 files changed

+963
-555
lines changed

waltz-jobs/src/main/java/org/finos/waltz/jobs/example/DemoDataLoader.java

Lines changed: 0 additions & 552 deletions
This file was deleted.
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
package org.finos.waltz.jobs.example.demodata;
2+
3+
import org.apache.poi.ss.usermodel.Workbook;
4+
import org.apache.poi.ss.usermodel.WorkbookFactory;
5+
import org.finos.waltz.common.DateTimeUtilities;
6+
import org.finos.waltz.common.IOUtilities;
7+
import org.finos.waltz.common.LoggingUtilities;
8+
import org.finos.waltz.jobs.example.demodata.generators.AllocationAndPrimaryRatingGenerator;
9+
import org.finos.waltz.jobs.example.demodata.loaders.*;
10+
import org.finos.waltz.model.EntityKind;
11+
import org.finos.waltz.schema.tables.records.MeasurableCategoryRecord;
12+
import org.finos.waltz.schema.tables.records.RatingSchemeItemRecord;
13+
import org.finos.waltz.schema.tables.records.RatingSchemeRecord;
14+
import org.finos.waltz.service.DIConfiguration;
15+
import org.finos.waltz.service.entity_hierarchy.EntityHierarchyService;
16+
import org.jooq.DSLContext;
17+
import org.jooq.lambda.tuple.Tuple2;
18+
import org.slf4j.Logger;
19+
import org.slf4j.LoggerFactory;
20+
import org.springframework.context.ApplicationContext;
21+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
22+
import org.springframework.stereotype.Service;
23+
24+
import java.io.IOException;
25+
import java.sql.Timestamp;
26+
import java.util.Map;
27+
import java.util.Set;
28+
import java.util.stream.Stream;
29+
30+
import static java.lang.String.format;
31+
import static java.util.stream.Collectors.toSet;
32+
import static org.finos.waltz.common.MapUtilities.indexBy;
33+
import static org.finos.waltz.data.JooqUtilities.summarizeResults;
34+
import static org.finos.waltz.jobs.example.demodata.DemoUtils.*;
35+
import static org.jooq.lambda.tuple.Tuple.tuple;
36+
37+
38+
@Service
39+
public class DemoDataPopulator {
40+
41+
private static final Logger LOG = LoggerFactory.getLogger(DemoDataPopulator.class);
42+
43+
44+
private final DSLContext dsl;
45+
private final EntityHierarchyService hierarchyService;
46+
47+
48+
public DemoDataPopulator(DSLContext dsl, EntityHierarchyService hierarchyService) {
49+
this.dsl = dsl;
50+
this.hierarchyService = hierarchyService;
51+
}
52+
53+
54+
55+
private void go() throws IOException {
56+
Workbook workbook = WorkbookFactory.create(IOUtilities.getFileResource("sample-data/v1.xlsx").getInputStream());
57+
dsl.transaction(ctx -> {
58+
DSLContext waltz = ctx.dsl();
59+
Timestamp now = DateTimeUtilities.nowUtcTimestamp();
60+
61+
blat(waltz);
62+
63+
Tuple2<Long, Map<InvestmentRating, Long>> categoryAndScheme = createCategoryAndScheme(waltz, now);
64+
65+
OrgUnitLoader.process(waltz, workbook.getSheet("org"), now);
66+
ApplicationLoader.process(waltz, workbook.getSheet("apps"), now);
67+
DataTypeLoader.process(waltz, workbook.getSheet("data-types"), now);
68+
// DataFlowLoader.process(waltz, workbook.getSheet("flows"), now);
69+
CapabilityLoader.process(waltz, workbook.getSheet("capabilities"), categoryAndScheme.v1, now);
70+
AppToCapabilityLoader.process(waltz, workbook.getSheet("app-cap"), now);
71+
AppToAssessmentLoader.process(waltz, workbook.getSheet("app-assessments"), now);
72+
AllocationAndPrimaryRatingGenerator.generate(waltz, categoryAndScheme.v1);
73+
74+
75+
76+
rebuildHierarchies();
77+
78+
79+
throw new RuntimeException("rolling back, comment this line if you really want to do this!");
80+
});
81+
82+
LOG.debug("Done");
83+
}
84+
85+
86+
private void rebuildHierarchies() {
87+
LOG.debug("Rebuilding hierarchies");
88+
hierarchyService.buildFor(EntityKind.ORG_UNIT);
89+
hierarchyService.buildFor(EntityKind.MEASURABLE);
90+
hierarchyService.buildFor(EntityKind.PERSON);
91+
hierarchyService.buildFor(EntityKind.DATA_TYPE);
92+
}
93+
94+
95+
96+
97+
98+
99+
100+
101+
private Tuple2<Long, Map<InvestmentRating, Long>> createCategoryAndScheme(DSLContext waltz,
102+
Timestamp now) {
103+
long rsId = createRatingScheme(waltz);
104+
Map<InvestmentRating, Long> ratingToIdMap = createRatingSchemeItems(waltz, rsId);
105+
long mcId = createCategory(waltz, rsId, now);
106+
return tuple(mcId, ratingToIdMap);
107+
}
108+
109+
110+
private Map<InvestmentRating, Long> createRatingSchemeItems(DSLContext waltz, long rsId) {
111+
Set<RatingSchemeItemRecord> items = Stream
112+
.of(InvestmentRating.values())
113+
.map(d -> {
114+
RatingSchemeItemRecord r = waltz.newRecord(rsi);
115+
r.setName(d.displayName);
116+
r.setColor(d.color);
117+
r.setDescription(format(
118+
"Investment Rating: %s",
119+
d.displayName));
120+
r.setExternalId(d.name());
121+
r.setSchemeId(rsId);
122+
r.setCode(d.code);
123+
return r;
124+
})
125+
.collect(toSet());
126+
127+
int insertCount = summarizeResults(waltz.batchInsert(items).execute());
128+
129+
LOG.debug("Created {} new ratings for scheme {}", insertCount, rsId);
130+
131+
return indexBy(
132+
items,
133+
d -> InvestmentRating.valueOf(d.getExternalId()),
134+
RatingSchemeItemRecord::getId);
135+
136+
}
137+
138+
139+
private static long createRatingScheme(DSLContext waltz) {
140+
RatingSchemeRecord r = waltz.newRecord(rs);
141+
r.setName("Investment Status");
142+
r.setDescription("Scheme reflecting Invest/Disinvest/Maintain ratings");
143+
r.setExternalId("INVEST");
144+
145+
r.store();
146+
147+
LOG.debug("Created new scheme {}/{}", r.getExternalId(), r.getId());
148+
149+
return r.getId();
150+
151+
}
152+
153+
154+
private static long createCategory(DSLContext waltz,
155+
long rsId,
156+
Timestamp now) {
157+
MeasurableCategoryRecord r = waltz.newRecord(mc);
158+
r.setName("Capability");
159+
r.setDescription("Capability Taxonomy");
160+
r.setAllowPrimaryRatings(true);
161+
r.setExternalId("CAPABILITY");
162+
r.setIconName("puzzle-piece");
163+
r.setRatingSchemeId(rsId);
164+
r.setLastUpdatedAt(now);
165+
r.setLastUpdatedBy(USER_ID);
166+
r.store();
167+
168+
LOG.debug("Created new category {}/{}", r.getExternalId(), r.getId());
169+
170+
return r.getId();
171+
}
172+
173+
174+
private void blat(DSLContext waltz) {
175+
LOG.warn("Deleting lots of data");
176+
177+
waltz.deleteFrom(alloc).execute();
178+
waltz.deleteFrom(allocScheme).execute();
179+
180+
waltz.deleteFrom(mr).execute();
181+
waltz.deleteFrom(ar).execute();
182+
waltz.deleteFrom(m).execute();
183+
waltz.deleteFrom(mc).execute();
184+
waltz.deleteFrom(ad).execute();
185+
waltz.deleteFrom(rsi).execute();
186+
waltz.deleteFrom(rs).execute();
187+
188+
waltz.deleteFrom(lf).execute();
189+
waltz.deleteFrom(lfd).execute();
190+
waltz.deleteFrom(dt).execute();
191+
192+
waltz.deleteFrom(app).execute();
193+
waltz.deleteFrom(ou).execute();
194+
}
195+
196+
197+
public static void main(String[] args) throws Exception {
198+
LoggingUtilities.configureLogging();
199+
200+
ApplicationContext ctx = new AnnotationConfigApplicationContext(DIConfiguration.class);
201+
202+
DemoDataPopulator loader = ctx.getBean(DemoDataPopulator.class);
203+
204+
loader.go();
205+
}
206+
207+
208+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.finos.waltz.jobs.example.demodata;
2+
3+
import org.apache.poi.ss.usermodel.Cell;
4+
import org.apache.poi.ss.usermodel.Row;
5+
import org.finos.waltz.schema.Tables;
6+
import org.finos.waltz.schema.tables.*;
7+
import org.jooq.DSLContext;
8+
9+
import java.util.Map;
10+
11+
import static org.finos.waltz.schema.Tables.ALLOCATION;
12+
import static org.finos.waltz.schema.Tables.ALLOCATION_SCHEME;
13+
14+
public class DemoUtils {
15+
16+
17+
public static final OrganisationalUnit ou = Tables.ORGANISATIONAL_UNIT;
18+
public static final MeasurableCategory mc = Tables.MEASURABLE_CATEGORY;
19+
public static final RatingScheme rs = Tables.RATING_SCHEME;
20+
public static final RatingSchemeItem rsi = Tables.RATING_SCHEME_ITEM;
21+
public static final Measurable m = Tables.MEASURABLE;
22+
public static final MeasurableRating mr = Tables.MEASURABLE_RATING;
23+
public static final Application app = Tables.APPLICATION;
24+
public static final DataType dt = Tables.DATA_TYPE;
25+
public static final LogicalFlow lf = Tables.LOGICAL_FLOW;
26+
public static final LogicalFlowDecorator lfd = Tables.LOGICAL_FLOW_DECORATOR;
27+
public static final AssessmentRating ar = Tables.ASSESSMENT_RATING;
28+
public static final AssessmentDefinition ad = Tables.ASSESSMENT_DEFINITION;
29+
public static final AllocationScheme allocScheme = ALLOCATION_SCHEME;
30+
public static final Allocation alloc = ALLOCATION;
31+
32+
33+
public static final String PROVENANCE = "test";
34+
public static final String USER_ID = "admin";
35+
36+
public static String strVal(Row row,
37+
int col) {
38+
Cell cell = row.getCell(col);
39+
return cell == null ? null : cell.getStringCellValue();
40+
}
41+
42+
43+
public static Double numberVal(Row row,
44+
int col) {
45+
Cell cell = row.getCell(col);
46+
return cell == null ? null : cell.getNumericCellValue();
47+
}
48+
49+
50+
public static Map<String, Long> fetchCapabilityExtIdToIdMap(DSLContext waltz) {
51+
return waltz
52+
.select(m.EXTERNAL_ID, m.ID)
53+
.from(m)
54+
.fetchMap(m.EXTERNAL_ID, m.ID);
55+
}
56+
57+
58+
public static Map<String, Long> fetchAppExtIdToIdMap(DSLContext waltz) {
59+
return waltz
60+
.select(app.ASSET_CODE, app.ID)
61+
.from(app)
62+
.fetchMap(app.ASSET_CODE, app.ID);
63+
}
64+
65+
66+
public static Map<String, Long> fetchDataTypeExtIdToIdMap(DSLContext waltz) {
67+
return waltz
68+
.select(dt.CODE, dt.ID)
69+
.from(dt)
70+
.fetchMap(dt.CODE, dt.ID);
71+
}
72+
73+
}

waltz-jobs/src/main/java/org/finos/waltz/jobs/example/InvestmentRating.java renamed to waltz-jobs/src/main/java/org/finos/waltz/jobs/example/demodata/InvestmentRating.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.finos.waltz.jobs.example;
1+
package org.finos.waltz.jobs.example.demodata;
22

33
public enum InvestmentRating {
44
INVEST("Invest", "I", "green"),
@@ -17,4 +17,9 @@ public enum InvestmentRating {
1717
this.code = code;
1818
this.color = color;
1919
}
20-
}
20+
21+
22+
public String code() {
23+
return code;
24+
}
25+
}

0 commit comments

Comments
 (0)