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 | |
| 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 | } |