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