diff -r 0d1cba59734b -r 1ca0d7fdbe51 java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java Tue Jun 08 10:42:58 2010 +0200 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java Tue Jun 08 12:56:46 2010 +0200 @@ -1,11 +1,28 @@ package cz.frantovo.nekurak.util; +import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka; +import java.io.ByteArrayInputStream; +import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import org.w3c.dom.Document; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + /** * Validátor komentářů * @author fiki */ public class Komentare { + private static final Logger log = Logger.getLogger(Komentare.class.getSimpleName()); + /** * Escapuje XML a doplní XHTML zalomení na konce řádků. * @param komentar prostý text zadaný uživatelem @@ -30,8 +47,42 @@ * @param komentar * @return jestli komentář odpovídá */ - public boolean isValidniXHTML(String komentar) { - return false; + public static Document zkontroluj(String komentar) throws KomentarovaVyjimka { + + + + + try { + URL soubor = ClassLoader.getSystemResource("cz/frantovo/nekurak/util/komentář.xsd"); + SchemaFactory tovarnaSchemat = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + Schema schema = tovarnaSchemat.newSchema(soubor); + + DocumentBuilderFactory tovarnaDB = DocumentBuilderFactory.newInstance(); + tovarnaDB.setSchema(schema); + + DocumentBuilder db = tovarnaDB.newDocumentBuilder(); + db.setErrorHandler(new ErrorHandler() { + + public void warning(SAXParseException e) throws SAXException { + throw e; + } + + public void error(SAXParseException e) throws SAXException { + throw e; + } + + public void fatalError(SAXParseException e) throws SAXException { + throw e; + } + }); + Document dokument = db.parse(new ByteArrayInputStream(komentar.getBytes("UTF-8"))); + + return dokument; + } catch (Exception e) { + throw new KomentarovaVyjimka("Neplatný komentář: " + komentar, e); + } + + } private static String escapujXML(String str) {