# HG changeset patch # User František Kučera # Date 1275996553 -7200 # Node ID 2acdbc74bc2472d0aef9d1b4aa498456fecb2355 # Parent 1ca0d7fdbe5184de92b4ec491b6f1bb1d587937e zalamování řádků diff -r 1ca0d7fdbe51 -r 2acdbc74bc24 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Jun 08 12:56:46 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Jun 08 13:29:13 2010 +0200 @@ -31,6 +31,7 @@ private PodnikDAO podnikDAO; @Resource private SessionContext ctx; + private Komentare komentare = new Komentare(); public Collection getPodniky() { Collection vysledek = podnikDAO.getPodniky(); @@ -90,17 +91,19 @@ switch (k.getTyp()) { case PROSTY_TEXT: k.setKomentar(Komentare.upravProstyText(k.getKomentar())); - k.setKomentar(Komentare.obal(k.getKomentar())); break; case TEXY: Texy t = new Texy(); k.setKomentar(t.preved(k.getKomentar())); - k.setKomentar(Komentare.obal(k.getKomentar())); + break; + case XHTML: + k.setKomentar(Komentare.upravXHTML(k.getKomentar())); break; } + k.setKomentar(Komentare.obal(k.getKomentar())); /** Zkontrolujeme XML */ - Komentare.zkontroluj(k.getKomentar()); + komentare.zkontroluj(k.getKomentar()); /** TODO: Uložíme do databáze */ diff -r 1ca0d7fdbe51 -r 2acdbc74bc24 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 12:56:46 2010 +0200 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java Tue Jun 08 13:29:13 2010 +0200 @@ -3,7 +3,6 @@ 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; @@ -29,8 +28,31 @@ * @return XHTML komentář bez kořenového elementu */ public static String upravProstyText(String komentar) { - komentar = escapujXML(komentar); - return "

" + komentar.replaceAll("\n", "
") + "

"; + return zalomRadky(escapujXML(komentar)); + } + + /** + * Pokud uživatel zapomněl na odstavce, + * zalomíme řádky a zabalíme celý odstavec do jednoho odstavce + * @param komentar komentář bez odstavců + * @return komentář s odstavci + */ + public static String upravXHTML(String komentar) { + if (komentar.indexOf("

") == -1) { + return zalomRadky(komentar); + } else { + return komentar; + } + } + + /** + * Přidá na konce řádků <br/> + * a celé zabalí do <p/> + * @param komentar + * @return + */ + private static String zalomRadky(String komentar) { + return "

" + komentar.replaceAll("\n", "
\n") + "

"; } /** @@ -43,17 +65,17 @@ } /** - * zkontroluje komentář oproti schématu + * zkontroluje komentář oproti schématu. + * + * TODO: omezit maximální délku? + * TODO: omezit komentáře? + * * @param komentar * @return jestli komentář odpovídá */ - public static Document zkontroluj(String komentar) throws KomentarovaVyjimka { - - - - + public Document zkontroluj(String komentar) throws KomentarovaVyjimka { try { - URL soubor = ClassLoader.getSystemResource("cz/frantovo/nekurak/util/komentář.xsd"); + URL soubor = this.getClass().getClassLoader().getResource("cz/frantovo/nekurak/util/komentář.xsd"); SchemaFactory tovarnaSchemat = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = tovarnaSchemat.newSchema(soubor); @@ -68,15 +90,19 @@ } public void error(SAXParseException e) throws SAXException { + /** + * neodpovídá schématu + * TODO: poslat hlášku, v čem je chyba + */ throw e; } public void fatalError(SAXParseException e) throws SAXException { + /** invalidní XML – neuzavřené značky atd. */ throw e; } }); Document dokument = db.parse(new ByteArrayInputStream(komentar.getBytes("UTF-8"))); - return dokument; } catch (Exception e) { throw new KomentarovaVyjimka("Neplatný komentář: " + komentar, e); diff -r 1ca0d7fdbe51 -r 2acdbc74bc24 java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java --- a/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java Tue Jun 08 12:56:46 2010 +0200 +++ b/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java Tue Jun 08 13:29:13 2010 +0200 @@ -6,6 +6,8 @@ public class KomentareTest { + Komentare komentare = new Komentare(); + @Test public void obal() { String vystup = Komentare.obal("asdf"); @@ -17,38 +19,47 @@ public void upravProstýTextObal() { String vystup = Komentare.upravProstyText("as\ndf"); vystup = Komentare.obal(vystup); - String pozadovanyVystup = "

as
df

"; + String pozadovanyVystup = "

as
\ndf

"; assertEquals(pozadovanyVystup, vystup); } @Test + public void komentáře() throws KomentarovaVyjimka { + /** + * Komentáře jsou povolené. TODO: OK? + */ + String výstup = Komentare.upravProstyText("aaabbb"); + výstup = Komentare.obal(výstup); + komentare.zkontroluj(výstup); + } + + @Test public void zvláštníZnaky() { String vystup = Komentare.upravProstyText("nbusr123 & | and < … > uvo\"zovky'"); String pozadovanyVystup = "

nbusr123 & | and < … > uvo"zovky'

"; - System.out.println(vystup); assertEquals(pozadovanyVystup, vystup); } @Test public void xmlJednoduché() throws Exception { - Komentare.zkontroluj("

xxx

"); - Komentare.zkontroluj("

xxx

xxx

"); - Komentare.zkontroluj("

xxxtučněxxx

"); - Komentare.zkontroluj("

xxxtučněxxx

"); + komentare.zkontroluj("

xxx

"); + komentare.zkontroluj("

xxx

xxx

"); + komentare.zkontroluj("

xxxtučněxxx

"); + komentare.zkontroluj("

xxxtučněxxx

"); } @Test(expected = KomentarovaVyjimka.class) public void xmlChybaÚplněŠpatnéXML() throws Exception { - Komentare.zkontroluj("
xxx

"); + komentare.zkontroluj("
xxx

"); } @Test(expected = KomentarovaVyjimka.class) public void xmlChybaChybíOdstavec() throws Exception { - Komentare.zkontroluj("
xxx
"); + komentare.zkontroluj("
xxx
"); } @Test(expected = KomentarovaVyjimka.class) public void xmlChybaPřebýváAtribut() throws Exception { - Komentare.zkontroluj("

xxx

"); + komentare.zkontroluj("

xxx

"); } } diff -r 1ca0d7fdbe51 -r 2acdbc74bc24 java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp --- a/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp Tue Jun 08 12:56:46 2010 +0200 +++ b/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp Tue Jun 08 13:29:13 2010 +0200 @@ -29,7 +29,7 @@

-

+