blob: bbd5cb0a6dd8532818e9a908b3d9114dabae0a63 [file] [log] [blame]
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +01001package eu.mulk.demos.blog;
2
3import static java.util.stream.Collectors.toList;
Matthias Andreas Benkard36b0f042021-02-27 10:46:04 +01004import static java.util.stream.Collectors.toSet;
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +01005
Matthias Andreas Benkard36b0f042021-02-27 10:46:04 +01006import eu.mulk.demos.blog.authors.Author;
7import eu.mulk.demos.blog.comments.Comment;
8import eu.mulk.demos.blog.posts.Category;
9import eu.mulk.demos.blog.posts.Post;
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010010import io.quarkus.runtime.StartupEvent;
11import java.util.stream.Stream;
12import javax.enterprise.context.ApplicationScoped;
13import javax.enterprise.event.Observes;
14import javax.inject.Inject;
15import javax.persistence.EntityManager;
16import javax.transaction.Transactional;
17
18@ApplicationScoped
19public class DemoDataLoader {
20
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010021 static final int AUTHOR_COUNT = 3;
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010022 static final int POST_COUNT = 10;
23 static final int COMMENT_COUNT = 3;
24 static final int CATEGORY_COUNT = 2;
25
26 @Inject
27 EntityManager em;
28
29 @Transactional
30 void onStart(@Observes StartupEvent ev) {
31 if (Author.findAll().stream().findAny().isPresent()) {
32 // Already initialized.
33 return;
34 }
35
36 // Authors
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010037 var authors =
38 nat(AUTHOR_COUNT)
39 .map(x -> Author.create("Author #%d".formatted(x)))
40 .collect(toList());
41 authors.forEach(em::persist);
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010042
43 // Posts
44 var posts =
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010045 nat(POST_COUNT)
46 .map(x -> Post.create(authors.get(x % AUTHOR_COUNT), "Post #%d".formatted(x)))
47 .collect(toList());
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010048 posts.forEach(em::persist);
49
50 // Comments
51 for (var post : posts) {
52 post.comments =
53 nat(COMMENT_COUNT)
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010054 .map(x -> Comment.create(post, "Anonymous Coward", "First post"))
Matthias Andreas Benkard36b0f042021-02-27 10:46:04 +010055 .collect(toSet());
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010056 post.comments.forEach(em::persist);
57 }
58
59 // Categories
60 var categories =
Matthias Andreas Benkard07540572021-02-27 07:11:36 +010061 nat(CATEGORY_COUNT)
62 .map(x -> Category.create("Category #%d".formatted(x)))
Matthias Andreas Benkard36b0f042021-02-27 10:46:04 +010063 .collect(toSet());
Matthias Andreas Benkard0c009e82021-02-26 07:23:27 +010064 categories.forEach(em::persist);
65 for (var post : posts) {
66 post.categories = categories;
67 }
68 }
69
70 private static Stream<Integer> nat(int postCount) {
71 return nat().limit(postCount);
72 }
73
74 private static Stream<Integer> nat() {
75 return Stream.iterate(0, x -> x + 1);
76 }
77}