From c64f1f9b5f99b27b9705a13ee7dcc0dca3061c86 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 17 Dec 2022 18:44:58 +0100 Subject: [PATCH] finished rss --- build.gradle | 2 +- .../module/admin/AdminController.java | 23 +++++++++++ .../module/rss/RssController.java | 38 ++---------------- .../camporganizer/module/rss/RssGateway.java | 7 ++++ .../camporganizer/module/rss/RssModel.java | 24 ++++++----- .../camporganizer/module/rss/RssService.java | 40 +++++++++++++++++-- src/main/resources/templates/admin/main.html | 22 ++++++++++ .../templates/confirmation/confirmation.html | 3 ++ src/main/resources/templates/dashboard.html | 3 ++ src/main/resources/templates/rss.html | 30 ++++++++++++++ 10 files changed, 143 insertions(+), 49 deletions(-) create mode 100644 src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java create mode 100644 src/main/resources/templates/admin/main.html create mode 100644 src/main/resources/templates/rss.html diff --git a/build.gradle b/build.gradle index af78b06..92d93d7 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ apply plugin: 'war' apply plugin: 'application' group = 'de.jottyfan.camporganizer' -version = '0.1.8' +version = '0.1.9' sourceCompatibility = 17 mainClassName = "de.jottyfan.camporganizer.Main" diff --git a/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java b/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java new file mode 100644 index 0000000..a49259b --- /dev/null +++ b/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java @@ -0,0 +1,23 @@ +package de.jottyfan.camporganizer.module.admin; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * + * @author jotty + * + */ +@Controller +public class AdminController { + + @GetMapping("/admin") + public String getMain() { + return "/admin/main"; + } + + @GetMapping("/admin/main") + public String getMainDirectly() { + return "redirect:/admin/main"; + } +} diff --git a/src/main/java/de/jottyfan/camporganizer/module/rss/RssController.java b/src/main/java/de/jottyfan/camporganizer/module/rss/RssController.java index 773c917..d62988c 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/rss/RssController.java +++ b/src/main/java/de/jottyfan/camporganizer/module/rss/RssController.java @@ -1,20 +1,11 @@ package de.jottyfan.camporganizer.module.rss; -import java.io.IOException; -import java.io.PrintWriter; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; - -import com.rometools.rome.feed.synd.SyndFeed; -import com.rometools.rome.io.FeedException; -import com.rometools.rome.io.SyndFeedOutput; +import org.springframework.web.bind.annotation.PathVariable; /** * @@ -24,32 +15,11 @@ import com.rometools.rome.io.SyndFeedOutput; @Controller public class RssController { - private String recipientCode; - @Autowired private RssService service; - @GetMapping("/rss") - public String toRss(HttpServletResponse response) throws IOException, FeedException { - List beans = new ArrayList<>(); - if (recipientCode != null) { - beans = service.getRss(recipientCode); - } else { - RssBean bean = new RssBean(null); - bean.setPubdate(LocalDateTime.now()); - bean.setMessage("Dieser Feed ist nicht mehr aktuell. Bitte gib einen recipientCode an."); - beans.add(bean); - } - SyndFeed feed = new RssModel().getRss(beans); - response.reset(); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application/rss+xml"); - response.setHeader("Content-Disposition", "attachment; filename=\"onkelwernerfreizeiten.de.xml\""); - PrintWriter writer; - writer = response.getWriter(); - SyndFeedOutput output = new SyndFeedOutput(); - output.output(feed, writer); - response.flushBuffer(); - return "error"; + @GetMapping("/rss/{recipientCode}") + public void toRssDirectly(@PathVariable String recipientCode, HttpServletResponse response) { + service.getRss(recipientCode, response); } } diff --git a/src/main/java/de/jottyfan/camporganizer/module/rss/RssGateway.java b/src/main/java/de/jottyfan/camporganizer/module/rss/RssGateway.java index a19802a..b47d833 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/rss/RssGateway.java +++ b/src/main/java/de/jottyfan/camporganizer/module/rss/RssGateway.java @@ -10,6 +10,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; import org.jooq.DeleteConditionStep; +import org.jooq.Record1; import org.jooq.Record3; import org.jooq.Record4; import org.jooq.SelectConditionStep; @@ -57,6 +58,12 @@ public class RssGateway { return list; } + public List getAllFeeds() { + SelectJoinStep> sql = jooq.selectDistinct(T_RSS.RECIPIENT).from(T_RSS); + LOGGER.debug(sql.toString()); + return sql.fetch(T_RSS.RECIPIENT); + } + public List getAllRss() throws DataAccessException { SelectJoinStep> sql = jooq // @formatter:off diff --git a/src/main/java/de/jottyfan/camporganizer/module/rss/RssModel.java b/src/main/java/de/jottyfan/camporganizer/module/rss/RssModel.java index 9abfc30..c374e37 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/rss/RssModel.java +++ b/src/main/java/de/jottyfan/camporganizer/module/rss/RssModel.java @@ -1,7 +1,8 @@ package de.jottyfan.camporganizer.module.rss; import java.sql.Timestamp; -import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -27,16 +28,17 @@ public class RssModel { feed.setEncoding("UTF-8"); List entries = new ArrayList<>(); for (RssBean bean : beans) { - SyndEntry entry = new SyndEntryImpl(); - entry.setTitle("neue Aktivität"); - entry.setLink("https://www.onkelwernerfreizeiten.de/camporganizer/"); - entry.setUri(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(bean.getPubdate())); - entry.setPublishedDate(Timestamp.valueOf(bean.getPubdate())); - SyndContent description = new SyndContentImpl(); - description.setType("text/plain"); - description.setValue(bean.getMessage()); - entry.setDescription(description); - entries.add(entry); + SyndEntry entry = new SyndEntryImpl(); + entry.setTitle("neue Aktivität"); + entry.setLink("https://www.onkelwernerfreizeiten.de/camporganizer/"); + LocalDateTime pubDate = bean.getPubdate() == null ? LocalDateTime.now() : bean.getPubdate(); + entry.setUri(pubDate.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))); + entry.setPublishedDate(Timestamp.valueOf(bean.getPubdate())); + SyndContent description = new SyndContentImpl(); + description.setType("text/plain"); + description.setValue(bean.getMessage()); + entry.setDescription(description); + entries.add(entry); } feed.setEntries(entries); return feed; diff --git a/src/main/java/de/jottyfan/camporganizer/module/rss/RssService.java b/src/main/java/de/jottyfan/camporganizer/module/rss/RssService.java index 499e4a8..829ae4c 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/rss/RssService.java +++ b/src/main/java/de/jottyfan/camporganizer/module/rss/RssService.java @@ -1,10 +1,20 @@ package de.jottyfan.camporganizer.module.rss; +import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.rometools.rome.feed.synd.SyndFeed; +import com.rometools.rome.io.SyndFeedOutput; + /** * * @author jotty @@ -12,16 +22,40 @@ import org.springframework.stereotype.Service; */ @Service public class RssService { + private static final Logger LOGGER = LogManager.getLogger(RssService.class); + @Autowired private RssGateway repository; /** * get the recipient's rss feed + * * @param recipientCode the code for the feed + * @param response the http servlet response * @return the list of rss beans; an empty list at least */ - public List getRss(String recipientCode) { - return repository.getRss(recipientCode); + public void getRss(String recipientCode, HttpServletResponse response) { + List beans = new ArrayList<>(); + if (recipientCode != null) { + beans = repository.getRss(recipientCode); + } else { + RssBean bean = new RssBean(null); + bean.setPubdate(LocalDateTime.now()); + bean.setMessage("Dieser Feed ist nicht mehr aktuell. Bitte gib einen recipientCode an."); + beans.add(bean); + } + SyndFeed feed = new RssModel().getRss(beans); + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/rss+xml"); + response.setHeader("Content-Disposition", "attachment; filename=\"onkelwernerfreizeiten.de.xml\""); + try { + PrintWriter writer = response.getWriter(); + new SyndFeedOutput().output(feed, writer); + writer.flush(); + response.flushBuffer(); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } } - } diff --git a/src/main/resources/templates/admin/main.html b/src/main/resources/templates/admin/main.html new file mode 100644 index 0000000..f2c090e --- /dev/null +++ b/src/main/resources/templates/admin/main.html @@ -0,0 +1,22 @@ + + + +Camp Organizer Confirmation + + + + + + + + +
+ TODO: implement +
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/confirmation/confirmation.html b/src/main/resources/templates/confirmation/confirmation.html index 6ad8473..93291ad 100644 --- a/src/main/resources/templates/confirmation/confirmation.html +++ b/src/main/resources/templates/confirmation/confirmation.html @@ -6,6 +6,9 @@ + diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html index 2e6f86e..52a034e 100644 --- a/src/main/resources/templates/dashboard.html +++ b/src/main/resources/templates/dashboard.html @@ -15,6 +15,9 @@ + diff --git a/src/main/resources/templates/rss.html b/src/main/resources/templates/rss.html new file mode 100644 index 0000000..5c7e2cd --- /dev/null +++ b/src/main/resources/templates/rss.html @@ -0,0 +1,30 @@ + + + +Camp Organizer 2 + + + + + + + + + + +
+
+ +
+
+
+ + \ No newline at end of file