Matthias Andreas Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 1 | package eu.mulk.demos.blog; |
| 2 | |
| 3 | import static java.util.stream.Collectors.toList; |
| 4 | |
| 5 | import io.quarkus.runtime.StartupEvent; |
| 6 | import java.util.stream.Stream; |
| 7 | import javax.enterprise.context.ApplicationScoped; |
| 8 | import javax.enterprise.event.Observes; |
| 9 | import javax.inject.Inject; |
| 10 | import javax.persistence.EntityManager; |
| 11 | import javax.transaction.Transactional; |
| 12 | |
| 13 | @ApplicationScoped |
| 14 | public class DemoDataLoader { |
| 15 | |
Matthias Andreas Benkard | 0754057 | 2021-02-27 07:11:36 +0100 | [diff] [blame^] | 16 | static final int AUTHOR_COUNT = 3; |
Matthias Andreas Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 17 | 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 Benkard | 0754057 | 2021-02-27 07:11:36 +0100 | [diff] [blame^] | 32 | 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 Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 37 | |
| 38 | // Posts |
| 39 | var posts = |
Matthias Andreas Benkard | 0754057 | 2021-02-27 07:11:36 +0100 | [diff] [blame^] | 40 | nat(POST_COUNT) |
| 41 | .map(x -> Post.create(authors.get(x % AUTHOR_COUNT), "Post #%d".formatted(x))) |
| 42 | .collect(toList()); |
Matthias Andreas Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 43 | posts.forEach(em::persist); |
| 44 | |
| 45 | // Comments |
| 46 | for (var post : posts) { |
| 47 | post.comments = |
| 48 | nat(COMMENT_COUNT) |
Matthias Andreas Benkard | 0754057 | 2021-02-27 07:11:36 +0100 | [diff] [blame^] | 49 | .map(x -> Comment.create(post, "Anonymous Coward", "First post")) |
| 50 | .collect(toList()); |
Matthias Andreas Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 51 | post.comments.forEach(em::persist); |
| 52 | } |
| 53 | |
| 54 | // Categories |
| 55 | var categories = |
Matthias Andreas Benkard | 0754057 | 2021-02-27 07:11:36 +0100 | [diff] [blame^] | 56 | nat(CATEGORY_COUNT) |
| 57 | .map(x -> Category.create("Category #%d".formatted(x))) |
Matthias Andreas Benkard | 0c009e8 | 2021-02-26 07:23:27 +0100 | [diff] [blame] | 58 | .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 | } |