From b0bdce22447ff815512ae7612dd4ab4a5d9a409a Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Wed, 3 Jun 2020 17:32:55 +0300
Subject: sape: switch to xml output
---
src/main/java/com/juick/www/ad/SapeService.java | 4 +-
src/main/java/com/juick/www/ad/models/Page.java | 37 +++++++++++
src/main/java/com/juick/www/ad/models/Site.java | 87 +++++++++++++++++++++++++
3 files changed, 126 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/com/juick/www/ad/models/Page.java
create mode 100644 src/main/java/com/juick/www/ad/models/Site.java
(limited to 'src/main/java/com/juick/www/ad')
diff --git a/src/main/java/com/juick/www/ad/SapeService.java b/src/main/java/com/juick/www/ad/SapeService.java
index 4ef4a213..3c35f320 100644
--- a/src/main/java/com/juick/www/ad/SapeService.java
+++ b/src/main/java/com/juick/www/ad/SapeService.java
@@ -60,8 +60,8 @@ public class SapeService {
&& visitor.isAnonymous();
model.addAttribute("showAdv", showAdv);
if (showAdv) {
- String links = sape.getPageLinks(requestURI, sapeCookie).render();
- model.addAttribute("links", links);
+ sape.getPageLinks(requestURI, sapeCookie)
+ .ifPresent(sapePageLinks -> model.addAttribute("links", sapePageLinks.render()));
}
}
}
diff --git a/src/main/java/com/juick/www/ad/models/Page.java b/src/main/java/com/juick/www/ad/models/Page.java
new file mode 100644
index 00000000..d5bb8ae3
--- /dev/null
+++ b/src/main/java/com/juick/www/ad/models/Page.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2008-2020, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.juick.www.ad.models;
+
+import java.util.List;
+
+public class Page {
+ private final String uri;
+ private final List links;
+
+ public Page(String uri, List links) {
+ this.uri = uri;
+ this.links = links;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+ public List getLinks() {
+ return links;
+ }
+}
diff --git a/src/main/java/com/juick/www/ad/models/Site.java b/src/main/java/com/juick/www/ad/models/Site.java
new file mode 100644
index 00000000..fbe1c033
--- /dev/null
+++ b/src/main/java/com/juick/www/ad/models/Site.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2008-2020, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.juick.www.ad.models;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Site {
+ private final String siteUrl;
+ private final String delimiter;
+ private final List pages;
+ private final String code;
+
+ public Site(String siteUrl, String code, String delimiter, List pages) {
+ this.siteUrl = siteUrl;
+ this.code = code;
+ this.delimiter = delimiter;
+ this.pages = pages;
+ }
+
+ public String getSiteUrl() {
+ return siteUrl;
+ }
+ public String getDelimiter() {
+ return delimiter;
+ }
+ public List getPages() {
+ return pages;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public static Site fromXMLData(String data) throws ParserConfigurationException, IOException, SAXException {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(IOUtils.toInputStream(data, StandardCharsets.UTF_8));
+ Element sape = document.getDocumentElement();
+ String code = StringUtils.EMPTY;
+ String siteUrl = sape.getAttribute("site_url");
+ String delimiter = sape.getAttribute("delimiter");
+ NodeList pageNodes = sape.getElementsByTagName("page");
+ List pages = new ArrayList<>(pageNodes.getLength());
+ for (int i = 0; i < pageNodes.getLength(); i++) {
+ Element pageElement = (Element) pageNodes.item(i);
+ String uri = pageElement.getAttribute("uri");
+ if (uri.equals("*")) {
+ code = pageElement.getTextContent();
+ }
+ NodeList linkNodes = pageElement.getElementsByTagName("link");
+ List links = new ArrayList<>(linkNodes.getLength());
+ for (int j = 0; j < linkNodes.getLength(); j++) {
+ links.add(linkNodes.item(j).getTextContent());
+ }
+ pages.add(new Page(uri, links));
+ }
+ return new Site(siteUrl, code, delimiter, pages);
+ }
+}
--
cgit v1.2.3