1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Jun 08 12:56:46 2010 +0200
1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Jun 08 13:29:13 2010 +0200
1.3 @@ -31,6 +31,7 @@
1.4 private PodnikDAO podnikDAO;
1.5 @Resource
1.6 private SessionContext ctx;
1.7 + private Komentare komentare = new Komentare();
1.8
1.9 public Collection<Podnik> getPodniky() {
1.10 Collection<Podnik> vysledek = podnikDAO.getPodniky();
1.11 @@ -90,17 +91,19 @@
1.12 switch (k.getTyp()) {
1.13 case PROSTY_TEXT:
1.14 k.setKomentar(Komentare.upravProstyText(k.getKomentar()));
1.15 - k.setKomentar(Komentare.obal(k.getKomentar()));
1.16 break;
1.17 case TEXY:
1.18 Texy t = new Texy();
1.19 k.setKomentar(t.preved(k.getKomentar()));
1.20 - k.setKomentar(Komentare.obal(k.getKomentar()));
1.21 + break;
1.22 + case XHTML:
1.23 + k.setKomentar(Komentare.upravXHTML(k.getKomentar()));
1.24 break;
1.25 }
1.26 + k.setKomentar(Komentare.obal(k.getKomentar()));
1.27
1.28 /** Zkontrolujeme XML */
1.29 - Komentare.zkontroluj(k.getKomentar());
1.30 + komentare.zkontroluj(k.getKomentar());
1.31
1.32
1.33 /** TODO: Uložíme do databáze */
2.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java Tue Jun 08 12:56:46 2010 +0200
2.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java Tue Jun 08 13:29:13 2010 +0200
2.3 @@ -3,7 +3,6 @@
2.4 import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
2.5 import java.io.ByteArrayInputStream;
2.6 import java.net.URL;
2.7 -import java.util.logging.Level;
2.8 import java.util.logging.Logger;
2.9 import javax.xml.XMLConstants;
2.10 import javax.xml.parsers.DocumentBuilder;
2.11 @@ -29,8 +28,31 @@
2.12 * @return XHTML komentář bez kořenového elementu
2.13 */
2.14 public static String upravProstyText(String komentar) {
2.15 - komentar = escapujXML(komentar);
2.16 - return "<p>" + komentar.replaceAll("\n", "<br/>") + "</p>";
2.17 + return zalomRadky(escapujXML(komentar));
2.18 + }
2.19 +
2.20 + /**
2.21 + * Pokud uživatel zapomněl na odstavce,
2.22 + * zalomíme řádky a zabalíme celý odstavec do jednoho odstavce
2.23 + * @param komentar komentář bez odstavců
2.24 + * @return komentář s odstavci
2.25 + */
2.26 + public static String upravXHTML(String komentar) {
2.27 + if (komentar.indexOf("<p>") == -1) {
2.28 + return zalomRadky(komentar);
2.29 + } else {
2.30 + return komentar;
2.31 + }
2.32 + }
2.33 +
2.34 + /**
2.35 + * Přidá na konce řádků <br/>
2.36 + * a celé zabalí do <p/>
2.37 + * @param komentar
2.38 + * @return
2.39 + */
2.40 + private static String zalomRadky(String komentar) {
2.41 + return "<p>" + komentar.replaceAll("\n", "<br/>\n") + "</p>";
2.42 }
2.43
2.44 /**
2.45 @@ -43,17 +65,17 @@
2.46 }
2.47
2.48 /**
2.49 - * zkontroluje komentář oproti schématu
2.50 + * zkontroluje komentář oproti schématu.
2.51 + *
2.52 + * TODO: omezit maximální délku?
2.53 + * TODO: omezit komentáře?
2.54 + *
2.55 * @param komentar
2.56 * @return jestli komentář odpovídá
2.57 */
2.58 - public static Document zkontroluj(String komentar) throws KomentarovaVyjimka {
2.59 -
2.60 -
2.61 -
2.62 -
2.63 + public Document zkontroluj(String komentar) throws KomentarovaVyjimka {
2.64 try {
2.65 - URL soubor = ClassLoader.getSystemResource("cz/frantovo/nekurak/util/komentář.xsd");
2.66 + URL soubor = this.getClass().getClassLoader().getResource("cz/frantovo/nekurak/util/komentář.xsd");
2.67 SchemaFactory tovarnaSchemat = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
2.68 Schema schema = tovarnaSchemat.newSchema(soubor);
2.69
2.70 @@ -68,15 +90,19 @@
2.71 }
2.72
2.73 public void error(SAXParseException e) throws SAXException {
2.74 + /**
2.75 + * neodpovídá schématu
2.76 + * TODO: poslat hlášku, v čem je chyba
2.77 + */
2.78 throw e;
2.79 }
2.80
2.81 public void fatalError(SAXParseException e) throws SAXException {
2.82 + /** invalidní XML – neuzavřené značky atd. */
2.83 throw e;
2.84 }
2.85 });
2.86 Document dokument = db.parse(new ByteArrayInputStream(komentar.getBytes("UTF-8")));
2.87 -
2.88 return dokument;
2.89 } catch (Exception e) {
2.90 throw new KomentarovaVyjimka("Neplatný komentář: " + komentar, e);
3.1 --- a/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java Tue Jun 08 12:56:46 2010 +0200
3.2 +++ b/java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java Tue Jun 08 13:29:13 2010 +0200
3.3 @@ -6,6 +6,8 @@
3.4
3.5 public class KomentareTest {
3.6
3.7 + Komentare komentare = new Komentare();
3.8 +
3.9 @Test
3.10 public void obal() {
3.11 String vystup = Komentare.obal("asdf");
3.12 @@ -17,38 +19,47 @@
3.13 public void upravProstýTextObal() {
3.14 String vystup = Komentare.upravProstyText("as\ndf");
3.15 vystup = Komentare.obal(vystup);
3.16 - String pozadovanyVystup = "<div><p>as<br/>df</p></div>";
3.17 + String pozadovanyVystup = "<div><p>as<br/>\ndf</p></div>";
3.18 assertEquals(pozadovanyVystup, vystup);
3.19 }
3.20
3.21 @Test
3.22 + public void komentáře() throws KomentarovaVyjimka {
3.23 + /**
3.24 + * Komentáře jsou povolené. TODO: OK?
3.25 + */
3.26 + String výstup = Komentare.upravProstyText("aaa<!-- komentář -->bbb");
3.27 + výstup = Komentare.obal(výstup);
3.28 + komentare.zkontroluj(výstup);
3.29 + }
3.30 +
3.31 + @Test
3.32 public void zvláštníZnaky() {
3.33 String vystup = Komentare.upravProstyText("nbusr123 & | and < … > uvo\"zovky'");
3.34 String pozadovanyVystup = "<p>nbusr123 & | and < … > uvo"zovky'</p>";
3.35 - System.out.println(vystup);
3.36 assertEquals(pozadovanyVystup, vystup);
3.37 }
3.38
3.39 @Test
3.40 public void xmlJednoduché() throws Exception {
3.41 - Komentare.zkontroluj("<div><p>xxx</p></div>");
3.42 - Komentare.zkontroluj("<div><p>xxx</p><p>xxx</p></div>");
3.43 - Komentare.zkontroluj("<div><p>xxx<strong>tučně</strong>xxx</p></div>");
3.44 - Komentare.zkontroluj("<div><p>xxx<em>tučně</em>xxx</p></div>");
3.45 + komentare.zkontroluj("<div><p>xxx</p></div>");
3.46 + komentare.zkontroluj("<div><p>xxx</p><p>xxx</p></div>");
3.47 + komentare.zkontroluj("<div><p>xxx<strong>tučně</strong>xxx</p></div>");
3.48 + komentare.zkontroluj("<div><p>xxx<em>tučně</em>xxx</p></div>");
3.49 }
3.50
3.51 @Test(expected = KomentarovaVyjimka.class)
3.52 public void xmlChybaÚplněŠpatnéXML() throws Exception {
3.53 - Komentare.zkontroluj("<div>xxx</p></div>");
3.54 + komentare.zkontroluj("<div>xxx</p></div>");
3.55 }
3.56
3.57 @Test(expected = KomentarovaVyjimka.class)
3.58 public void xmlChybaChybíOdstavec() throws Exception {
3.59 - Komentare.zkontroluj("<div>xxx</div>");
3.60 + komentare.zkontroluj("<div>xxx</div>");
3.61 }
3.62
3.63 @Test(expected = KomentarovaVyjimka.class)
3.64 public void xmlChybaPřebýváAtribut() throws Exception {
3.65 - Komentare.zkontroluj("<div omfg='xxx'><p>xxx</p></div>");
3.66 + komentare.zkontroluj("<div omfg='xxx'><p>xxx</p></div>");
3.67 }
3.68 }
4.1 --- a/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp Tue Jun 08 12:56:46 2010 +0200
4.2 +++ b/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp Tue Jun 08 13:29:13 2010 +0200
4.3 @@ -29,7 +29,7 @@
4.4 </p>
4.5 </c:when>
4.6 <c:otherwise>
4.7 - <p><fmt:message key="komentar.odeslat.chyba"/></p>
4.8 + <p class="chybovaHlaska"><fmt:message key="komentar.odeslat.chyba"/></p>
4.9 </c:otherwise>
4.10 </c:choose>
4.11