java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java
author František Kučera <franta-hg@frantovo.cz>
Tue, 08 Jun 2010 12:56:46 +0200
changeset 132 1ca0d7fdbe51
parent 131 0d1cba59734b
child 133 2acdbc74bc24
permissions -rw-r--r--
Testy komentářů, XML.
     1 package cz.frantovo.nekurak.util;
     2 
     3 import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
     4 import java.io.ByteArrayInputStream;
     5 import java.net.URL;
     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;
    17 
    18 /**
    19  * Validátor komentářů
    20  * @author fiki
    21  */
    22 public class Komentare {
    23 
    24     private static final Logger log = Logger.getLogger(Komentare.class.getSimpleName());
    25 
    26     /**
    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
    30      */
    31     public static String upravProstyText(String komentar) {
    32 	komentar = escapujXML(komentar);
    33 	return "<p>" + komentar.replaceAll("\n", "<br/>") + "</p>";
    34     }
    35 
    36     /**
    37      *
    38      * @param komentar vstupní XHTML
    39      * @return XHTML obalené kořenovým elementem
    40      */
    41     public static String obal(String komentar) {
    42 	return "<div>" + komentar + "</div>";
    43     }
    44 
    45     /**
    46      * zkontroluje komentář oproti schématu
    47      * @param komentar
    48      * @return jestli komentář odpovídá
    49      */
    50     public static Document zkontroluj(String komentar) throws KomentarovaVyjimka {
    51 
    52 
    53 
    54 
    55 	try {
    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);
    59 
    60 	    DocumentBuilderFactory tovarnaDB = DocumentBuilderFactory.newInstance();
    61 	    tovarnaDB.setSchema(schema);
    62 
    63 	    DocumentBuilder db = tovarnaDB.newDocumentBuilder();
    64 	    db.setErrorHandler(new ErrorHandler() {
    65 
    66 		public void warning(SAXParseException e) throws SAXException {
    67 		    throw e;
    68 		}
    69 
    70 		public void error(SAXParseException e) throws SAXException {
    71 		    throw e;
    72 		}
    73 
    74 		public void fatalError(SAXParseException e) throws SAXException {
    75 		    throw e;
    76 		}
    77 	    });
    78 	    Document dokument = db.parse(new ByteArrayInputStream(komentar.getBytes("UTF-8")));
    79 
    80 	    return dokument;
    81 	} catch (Exception e) {
    82 	    throw new KomentarovaVyjimka("Neplatný komentář: " + komentar, e);
    83 	}
    84 
    85 
    86     }
    87 
    88     private static String escapujXML(String str) {
    89 	return str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&apos;");
    90 
    91     }
    92 }