/* * Copyright (C) 2008-2022, 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 record Site(String siteUrl, String code, String delimiter, List pages) { 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); } }