blob: cbaed9acd18611e136ea2cccca7116bf8799cf9a [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
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010016 static final int AUTHOR_COUNT = 3;
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010017 static final int POST_COUNT = 10;
18 static final int COMMENT_COUNT = 3;
19 static final int CATEGORY_COUNT = 2;
20
21 @Inject
22 EntityManager em;
23
24 @Transactional
25 void onStart(@Observes StartupEvent ev) {
26 if (Author.findAll().stream().findAny().isPresent()) {
27 // Already initialized.
28 return;
29 }
30
31 // Authors
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010032 var authors =
33 nat(AUTHOR_COUNT)
34 .map(x -> Author.create("Author #%d".formatted(x)))
35 .collect(toList());
36 authors.forEach(em::persist);
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010037
38 // Posts
39 var posts =
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010040 nat(POST_COUNT)
41 .map(x -> Post.create(authors.get(x % AUTHOR_COUNT), "Post #%d".formatted(x)))
42 .collect(toList());
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010043 posts.forEach(em::persist);
44
45 // Comments
46 for (var post : posts) {
47 post.comments =
48 nat(COMMENT_COUNT)
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010049 .map(x -> Comment.create(post, "Anonymous Coward", "First post"))
50 .collect(toList());
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010051 post.comments.forEach(em::persist);
52 }
53
54 // Categories
55 var categories =
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010056 nat(CATEGORY_COUNT)
57 .map(x -> Category.create("Category #%d".formatted(x)))
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010058 .collect(toList());
59 categories.forEach(em::persist);
60 for (var post : posts) {
61 post.categories = categories;
62 }
63 }
64
65 private static Stream<Integer> nat(int postCount) {
66 return nat().limit(postCount);
67 }
68
69 private static Stream<Integer> nat() {
70 return Stream.iterate(0, x -> x + 1);
71 }
72}