blob: 3ee745a6b462b1119de8ebd3748de2c1b9e33e88 [file] [log] [blame]
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +01001package eu.mulk.demos.blog;
2
3import static java.util.stream.Collectors.toList;
4
5import io.quarkus.runtime.StartupEvent;
6import java.util.stream.Stream;
7import javax.enterprise.context.ApplicationScoped;
8import javax.enterprise.event.Observes;
9import javax.inject.Inject;
10import javax.persistence.EntityManager;
11import javax.transaction.Transactional;
12
13@ApplicationScoped
14public class DemoDataLoader {
15
16 static final int POST_COUNT = 10;
17 static final int COMMENT_COUNT = 3;
18 static final int CATEGORY_COUNT = 2;
19
20 @Inject
21 EntityManager em;
22
23 @Transactional
24 void onStart(@Observes StartupEvent ev) {
25 if (Author.findAll().stream().findAny().isPresent()) {
26 // Already initialized.
27 return;
28 }
29
30 // Authors
31 var mb = Author.create("Matthias Benkard");
32 em.persist(mb);
33
34 // Posts
35 var posts =
36 nat(POST_COUNT).map(x -> Post.create(mb, "Post #%d".formatted(x))).collect(toList());
37 posts.forEach(em::persist);
38
39 // Comments
40 for (var post : posts) {
41 post.comments =
42 nat(COMMENT_COUNT)
43 .map(x -> Comment.create(post, "Anonymous Coward", "First post")).collect(toList());
44 post.comments.forEach(em::persist);
45 }
46
47 // Categories
48 var categories =
49 nat(CATEGORY_COUNT).map(x -> Category.create("Category #%d".formatted(x)))
50 .collect(toList());
51 categories.forEach(em::persist);
52 for (var post : posts) {
53 post.categories = categories;
54 }
55 }
56
57 private static Stream<Integer> nat(int postCount) {
58 return nat().limit(postCount);
59 }
60
61 private static Stream<Integer> nat() {
62 return Stream.iterate(0, x -> x + 1);
63 }
64}