Testy komentářů, XML.
1 package cz.frantovo.nekurak.util;
3 import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
4 import java.io.ByteArrayInputStream;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8 import javax.xml.XMLConstants;
9 import javax.xml.parsers.DocumentBuilder;
10 import javax.xml.parsers.DocumentBuilderFactory;
11 import javax.xml.validation.Schema;
12 import javax.xml.validation.SchemaFactory;
13 import org.w3c.dom.Document;
14 import org.xml.sax.ErrorHandler;
15 import org.xml.sax.SAXException;
16 import org.xml.sax.SAXParseException;
22 public class Komentare {
24 private static final Logger log = Logger.getLogger(Komentare.class.getSimpleName());
27 * Escapuje XML a doplní XHTML zalomení na konce řádků.
28 * @param komentar prostý text zadaný uživatelem
29 * @return XHTML komentář bez kořenového elementu
31 public static String upravProstyText(String komentar) {
32 komentar = escapujXML(komentar);
33 return "<p>" + komentar.replaceAll("\n", "<br/>") + "</p>";
38 * @param komentar vstupní XHTML
39 * @return XHTML obalené kořenovým elementem
41 public static String obal(String komentar) {
42 return "<div>" + komentar + "</div>";
46 * zkontroluje komentář oproti schématu
48 * @return jestli komentář odpovídá
50 public static Document zkontroluj(String komentar) throws KomentarovaVyjimka {
56 URL soubor = ClassLoader.getSystemResource("cz/frantovo/nekurak/util/komentář.xsd");
57 SchemaFactory tovarnaSchemat = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
58 Schema schema = tovarnaSchemat.newSchema(soubor);
60 DocumentBuilderFactory tovarnaDB = DocumentBuilderFactory.newInstance();
61 tovarnaDB.setSchema(schema);
63 DocumentBuilder db = tovarnaDB.newDocumentBuilder();
64 db.setErrorHandler(new ErrorHandler() {
66 public void warning(SAXParseException e) throws SAXException {
70 public void error(SAXParseException e) throws SAXException {
74 public void fatalError(SAXParseException e) throws SAXException {
78 Document dokument = db.parse(new ByteArrayInputStream(komentar.getBytes("UTF-8")));
81 } catch (Exception e) {
82 throw new KomentarovaVyjimka("Neplatný komentář: " + komentar, e);
88 private static String escapujXML(String str) {
89 return str.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """).replaceAll("'", "'");