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') 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