From 91210a471827826111d89a50ccf37e4757c49e2d Mon Sep 17 00:00:00 2001 From: Tomasz Date: Tue, 13 Sep 2022 22:52:21 +0100 Subject: [PATCH] 1482 List the storybooks where an image is being used --- .../ai/elimu/dao/StoryBookChapterDao.java | 4 ++ src/main/java/ai/elimu/dao/StoryBookDao.java | 3 ++ .../elimu/dao/jpa/StoryBookChapterDaoJpa.java | 12 ++++++ .../ai/elimu/dao/jpa/StoryBookDaoJpa.java | 12 ++++++ .../multimedia/image/ImageEditController.java | 38 +++++++++++++------ .../WEB-INF/i18n/messages_en.properties | 2 + .../jsp/content/multimedia/image/edit.jsp | 9 +++++ 7 files changed, 68 insertions(+), 12 deletions(-) diff --git a/src/main/java/ai/elimu/dao/StoryBookChapterDao.java b/src/main/java/ai/elimu/dao/StoryBookChapterDao.java index def6ea6c2..b2a024e7a 100644 --- a/src/main/java/ai/elimu/dao/StoryBookChapterDao.java +++ b/src/main/java/ai/elimu/dao/StoryBookChapterDao.java @@ -4,9 +4,13 @@ import ai.elimu.model.content.StoryBook; import ai.elimu.model.content.StoryBookChapter; +import ai.elimu.model.content.multimedia.Image; import org.springframework.dao.DataAccessException; public interface StoryBookChapterDao extends GenericDao { List readAll(StoryBook storyBook) throws DataAccessException; + + List readAllWithImage(Image image) throws DataAccessException; + } diff --git a/src/main/java/ai/elimu/dao/StoryBookDao.java b/src/main/java/ai/elimu/dao/StoryBookDao.java index 53b00aa57..c5f405bab 100644 --- a/src/main/java/ai/elimu/dao/StoryBookDao.java +++ b/src/main/java/ai/elimu/dao/StoryBookDao.java @@ -3,6 +3,7 @@ import java.util.List; import ai.elimu.model.content.StoryBook; +import ai.elimu.model.content.multimedia.Image; import ai.elimu.model.v2.enums.ReadingLevel; import org.springframework.dao.DataAccessException; @@ -16,4 +17,6 @@ public interface StoryBookDao extends GenericDao { List readAllOrdered(ReadingLevel readingLevel) throws DataAccessException; List readAllUnleveled() throws DataAccessException; + + List readAllWithCoverImage(Image image) throws DataAccessException; } diff --git a/src/main/java/ai/elimu/dao/jpa/StoryBookChapterDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/StoryBookChapterDaoJpa.java index ac4f71af5..4a85982da 100644 --- a/src/main/java/ai/elimu/dao/jpa/StoryBookChapterDaoJpa.java +++ b/src/main/java/ai/elimu/dao/jpa/StoryBookChapterDaoJpa.java @@ -3,6 +3,7 @@ import ai.elimu.dao.StoryBookChapterDao; import java.util.List; +import ai.elimu.model.content.multimedia.Image; import org.springframework.dao.DataAccessException; import ai.elimu.model.content.StoryBook; @@ -20,4 +21,15 @@ public List readAll(StoryBook storyBook) throws DataAccessExce .setParameter("storyBook", storyBook) .getResultList(); } + + @Override + public List readAllWithImage(Image image) throws DataAccessException { + return em.createQuery( + "SELECT ch " + + "FROM StoryBookChapter ch " + + "WHERE ch.image = :image ") + .setParameter("image", image) + .getResultList(); + } + } diff --git a/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java b/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java index 96fd8d67b..831d8d37c 100644 --- a/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java +++ b/src/main/java/ai/elimu/dao/jpa/StoryBookDaoJpa.java @@ -4,6 +4,7 @@ import javax.persistence.NoResultException; import ai.elimu.dao.StoryBookDao; +import ai.elimu.model.content.multimedia.Image; import org.springframework.dao.DataAccessException; import ai.elimu.model.content.StoryBook; @@ -54,4 +55,15 @@ public List readAllUnleveled() throws DataAccessException { "ORDER BY book.title") .getResultList(); } + + @Override + public List readAllWithCoverImage(Image image) throws DataAccessException { + return em.createQuery( + "SELECT book " + + "FROM StoryBook book " + + "WHERE book.coverImage = :image") + .setParameter("image", image) + .getResultList(); + } + } diff --git a/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java b/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java index c571b0c3a..2212dd8d1 100644 --- a/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java +++ b/src/main/java/ai/elimu/web/content/multimedia/image/ImageEditController.java @@ -6,20 +6,13 @@ import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; + +import ai.elimu.dao.*; +import ai.elimu.model.content.*; +import ai.elimu.model.content.Number; import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.Logger; -import ai.elimu.dao.AudioDao; -import ai.elimu.dao.EmojiDao; -import ai.elimu.dao.ImageContributionEventDao; -import ai.elimu.dao.ImageDao; -import ai.elimu.dao.LetterDao; -import ai.elimu.dao.NumberDao; -import ai.elimu.dao.WordDao; -import ai.elimu.model.content.Emoji; -import ai.elimu.model.content.Letter; -import ai.elimu.model.content.Number; -import ai.elimu.model.content.Word; import ai.elimu.model.content.multimedia.Audio; import ai.elimu.model.content.multimedia.Image; import ai.elimu.model.contributor.Contributor; @@ -36,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.servlet.http.HttpSession; import org.apache.logging.log4j.LogManager; import org.springframework.beans.factory.annotation.Autowired; @@ -79,6 +73,12 @@ public class ImageEditController { @Autowired private AudioDao audioDao; + @Autowired + private StoryBookDao storyBookDao; + + @Autowired + private StoryBookChapterDao storyBookChapterDao; + @RequestMapping(value = "/{id}", method = RequestMethod.GET) public String handleRequest( Model model, @@ -98,7 +98,8 @@ public String handleRequest( model.addAttribute("numbers", numberDao.readAllOrdered()); model.addAttribute("words", wordDao.readAllOrdered()); model.addAttribute("emojisByWordId", getEmojisByWordId()); - + model.addAttribute("imageUsed", getStoryBooksUsedImage(image)); + Audio audio = audioDao.readByTranscription(image.getTitle()); model.addAttribute("audio", audio); @@ -372,4 +373,17 @@ private Map getEmojisByWordId() { return emojisByWordId; } + + private Map getStoryBooksUsedImage(Image image) { + List storyBooks = storyBookDao.readAllWithCoverImage(image); + List storyBookChapters = storyBookChapterDao.readAllWithImage(image); + + Map storyBooksTitle = storyBooks.stream().collect(Collectors.toMap(StoryBook::getId, StoryBook::getTitle)); + Map storyBookChaptersTitle = storyBookChapters.stream().collect(Collectors.toMap(i -> i.getStoryBook().getId(), i -> i.getStoryBook().getTitle())); + + storyBooksTitle.putAll(storyBookChaptersTitle); + + return storyBooksTitle; + } + } diff --git a/src/main/webapp/WEB-INF/i18n/messages_en.properties b/src/main/webapp/WEB-INF/i18n/messages_en.properties index 245116df9..ca89f67cc 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_en.properties +++ b/src/main/webapp/WEB-INF/i18n/messages_en.properties @@ -255,3 +255,5 @@ word.type=Word type words=Words words.pending=Words pending yes=Yes +image.used=It is used in: +story.books=Story books: diff --git a/src/main/webapp/WEB-INF/jsp/content/multimedia/image/edit.jsp b/src/main/webapp/WEB-INF/jsp/content/multimedia/image/edit.jsp index eed057316..f18e992f0 100644 --- a/src/main/webapp/WEB-INF/jsp/content/multimedia/image/edit.jsp +++ b/src/main/webapp/WEB-INF/jsp/content/multimedia/image/edit.jsp @@ -406,4 +406,13 @@ }); }); +
+ +
+