zalamování řádků
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 08 Jun 2010 13:29:13 +0200
changeset 1332acdbc74bc24
parent 132 1ca0d7fdbe51
child 134 4bd1e353c527
zalamování řádků
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java
java/nekurak.net-lib/test/cz/frantovo/nekurak/util/KomentareTest.java
java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp
     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ů &lt;br/&gt;
    2.36 +     * a celé zabalí do &lt;p/&gt;
    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 &amp; | and &lt; … &gt; uvo&quot;zovky&apos;</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