komentáře – escapování a EJB
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 08 Jun 2010 09:09:17 +0200
changeset 1301bbff3f5181f
parent 129 420d7024f6f4
child 131 0d1cba59734b
komentáře – escapování a EJB
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/Komentar.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties
java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/OdeslatKomentar.java
java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp
java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag
java/nekurak.net-web/web/index.jsp
     1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Jun 08 07:37:05 2010 +0200
     1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Jun 08 09:09:17 2010 +0200
     1.3 @@ -1,11 +1,15 @@
     1.4  package cz.frantovo.nekurak.ejb;
     1.5  
     1.6  import cz.frantovo.nekurak.dao.PodnikDAO;
     1.7 +import cz.frantovo.nekurak.dto.Komentar;
     1.8  import cz.frantovo.nekurak.dto.Podnik;
     1.9  import cz.frantovo.nekurak.dto.VysledekHlasovani;
    1.10  import cz.frantovo.nekurak.ext.Geo;
    1.11  import cz.frantovo.nekurak.ext.Geo.Souradnice;
    1.12 +import cz.frantovo.nekurak.ext.Texy;
    1.13 +import cz.frantovo.nekurak.util.Komentare;
    1.14  import java.util.Collection;
    1.15 +import java.util.Date;
    1.16  import java.util.logging.Logger;
    1.17  import javax.annotation.Resource;
    1.18  import javax.annotation.security.RolesAllowed;
    1.19 @@ -74,4 +78,27 @@
    1.20      public VysledekHlasovani getVysledekHlasovani(int podnik) {
    1.21  	return podnikDAO.getVysledekHlasovani(podnik);
    1.22      }
    1.23 +
    1.24 +    @RolesAllowed("opravneny")
    1.25 +    public void komentuj(Komentar k) {
    1.26 +	k.setUzivatel(ctx.getCallerPrincipal().getName());
    1.27 +	k.setDatum(new Date());
    1.28 +
    1.29 +	/** Převedeme na XML */
    1.30 +	switch (k.getTyp()) {
    1.31 +	    case PROSTY_TEXT:
    1.32 +		k.setKomentar(Komentare.upravProstyText(k.getKomentar()));
    1.33 +		k.setKomentar(Komentare.obal(k.getKomentar()));
    1.34 +		break;
    1.35 +	    case TEXY:
    1.36 +		Texy t = new Texy();
    1.37 +		k.setKomentar(t.preved(k.getKomentar()));
    1.38 +		k.setKomentar(Komentare.obal(k.getKomentar()));
    1.39 +		break;
    1.40 +	}
    1.41 +
    1.42 +
    1.43 +	/** Zkontrolujeme XML */
    1.44 +	log.severe("Komentář: " + k.getNadpis() + " | " + k.getKomentar() + " | " + k.getTyp());
    1.45 +    }
    1.46  }
     2.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/Komentar.java	Tue Jun 08 07:37:05 2010 +0200
     2.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/Komentar.java	Tue Jun 08 09:09:17 2010 +0200
     2.3 @@ -14,6 +14,21 @@
     2.4      private Date datum;
     2.5      private String nadpis;
     2.6      private String komentar;
     2.7 +    private TYP typ;
     2.8 +
     2.9 +    public TYP getTyp() {
    2.10 +	return typ;
    2.11 +    }
    2.12 +
    2.13 +    public void setTyp(TYP typ) {
    2.14 +	this.typ = typ;
    2.15 +    }
    2.16 +
    2.17 +    public enum TYP {
    2.18 +	PROSTY_TEXT,
    2.19 +	XHTML,
    2.20 +	TEXY
    2.21 +    }
    2.22  
    2.23      public int getId() {
    2.24  	return id;
     3.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java	Tue Jun 08 07:37:05 2010 +0200
     3.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java	Tue Jun 08 09:09:17 2010 +0200
     3.3 @@ -1,5 +1,6 @@
     3.4  package cz.frantovo.nekurak.ejb;
     3.5  
     3.6 +import cz.frantovo.nekurak.dto.Komentar;
     3.7  import cz.frantovo.nekurak.dto.Podnik;
     3.8  import cz.frantovo.nekurak.dto.VysledekHlasovani;
     3.9  import java.util.Collection;
    3.10 @@ -35,4 +36,9 @@
    3.11       * @return agregované výsledky hlasování pro daný podnik
    3.12       */
    3.13      public VysledekHlasovani getVysledekHlasovani(int podnik);
    3.14 +
    3.15 +    /**
    3.16 +     * @param k komentář, který se má přidat k podniku
    3.17 +     */
    3.18 +    public void komentuj(Komentar k);
    3.19  }
     4.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties	Tue Jun 08 07:37:05 2010 +0200
     4.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/preklady_cs.properties	Tue Jun 08 09:09:17 2010 +0200
     4.3 @@ -86,4 +86,11 @@
     4.4  komentare.komentovat=Komentovat!
     4.5  komentare.nadpis=Nadpis
     4.6  komentare.tlacitkoOdeslat=Vlo\u017Eit koment\u00E1\u0159
     4.7 -komentare.napsal=Napsal
     4.8 \ No newline at end of file
     4.9 +komentare.napsal=Napsal
    4.10 +komentar.odeslat.nadpis=Vlo\u017Een\u00ED koment\u00E1\u0159e
    4.11 +komentar.odeslat.ok=Koment\u00E1\u0159 byl \u00FAsp\u011B\u0161n\u011B vlo\u017Een
    4.12 +komentar.odeslat.pokracujte=pokra\u010Dujte na str\u00E1nku podniku
    4.13 +komentar.typ.prostyText=Prost\u00FD text
    4.14 +komentar.typ.xhtml=XHTML form\u00E1tovan\u00FD text
    4.15 +komentar.typ.texy=Texy form\u00E1tovan\u00FD text
    4.16 +
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/Komentare.java	Tue Jun 08 09:09:17 2010 +0200
     5.3 @@ -0,0 +1,32 @@
     5.4 +package cz.frantovo.nekurak.util;
     5.5 +
     5.6 +/**
     5.7 + * Validátor komentářů
     5.8 + * @author fiki
     5.9 + */
    5.10 +public class Komentare {
    5.11 +
    5.12 +    /**
    5.13 +     * Escapuje XML a doplní XHTML zalomení na konce řádků.
    5.14 +     * @param komentar prostý text zadaný uživatelem
    5.15 +     * @return XHTML komentář bez kořenového elementu
    5.16 +     */
    5.17 +    public static String upravProstyText(String komentar) {
    5.18 +	komentar = escapujXML(komentar);
    5.19 +	return "<p>" + komentar.replaceAll("\n", "<br/>") + "</p>";
    5.20 +    }
    5.21 +
    5.22 +    /**
    5.23 +     *
    5.24 +     * @param komentar vstupní XHTML
    5.25 +     * @return XHTML obalené kořenovým elementem
    5.26 +     */
    5.27 +    public static String obal(String komentar) {
    5.28 +	return "<div>" + komentar + "</div>";
    5.29 +    }
    5.30 +
    5.31 +    private static String escapujXML(String str) {
    5.32 +	return str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&apos;");
    5.33 +
    5.34 +    }
    5.35 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/OdeslatKomentar.java	Tue Jun 08 09:09:17 2010 +0200
     6.3 @@ -0,0 +1,18 @@
     6.4 +package cz.frantovo.nekurak.web;
     6.5 +
     6.6 +import cz.frantovo.nekurak.dto.Komentar;
     6.7 +import java.util.logging.Logger;
     6.8 +
     6.9 +/**
    6.10 + *
    6.11 + * @author fiki
    6.12 + */
    6.13 +public class OdeslatKomentar {
    6.14 +
    6.15 +    private HledacSluzby hledac = new HledacSluzby();
    6.16 +    private static final Logger log = Logger.getLogger(OdeslatKomentar.class.getSimpleName());
    6.17 +
    6.18 +    public void setKomentar(Komentar k) {
    6.19 +	hledac.getPodnikEJB().komentuj(k);
    6.20 +    }
    6.21 +}
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/java/nekurak.net-web/web/WEB-INF/casti/odeslatKomentar.jsp	Tue Jun 08 09:09:17 2010 +0200
     7.3 @@ -0,0 +1,32 @@
     7.4 +<?xml version="1.0" encoding="UTF-8"?>
     7.5 +<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
     7.6 +	  xmlns:c="http://java.sun.com/jsp/jstl/core"
     7.7 +	  xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
     7.8 +	  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
     7.9 +	  xmlns:nk="urn:jsptagdir:/WEB-INF/tags/nekurak"
    7.10 +	  version="2.0">
    7.11 +
    7.12 +    <jsp:useBean id="odeslatKomentar" class="cz.frantovo.nekurak.web.OdeslatKomentar" scope="request"/>
    7.13 +    <jsp:useBean id="komentar" class="cz.frantovo.nekurak.dto.Komentar" scope="request"/>
    7.14 +
    7.15 +
    7.16 +    <fmt:message key="komentar.odeslat.nadpis" var="titulekStranky"/>
    7.17 +    <nk:stranka titulek="${titulekStranky}">
    7.18 +
    7.19 +	<h1><c:out value="${titulekStranky}"/></h1>
    7.20 +
    7.21 +	<jsp:setProperty name="komentar" property="podnik" value="${param.podnik}"/>
    7.22 +	<jsp:setProperty name="komentar" property="nadpis" value="${param.nadpis}"/>
    7.23 +	<jsp:setProperty name="komentar" property="komentar" value="${param.komentar}"/>
    7.24 +	<jsp:setProperty name="komentar" property="typ" value="${param.typ}"/>
    7.25 +	<jsp:setProperty name="odeslatKomentar" property="komentar" value="${komentar}"/>
    7.26 +
    7.27 +	<p>
    7.28 +	    <fmt:message key="komentar.odeslat.ok"/>,
    7.29 +	    <a href="?akce=detail&amp;amp;podnik=${komentar.podnik}"><fmt:message key="komentar.odeslat.pokracujte"/></a>.
    7.30 +	</p>
    7.31 +
    7.32 +
    7.33 +    </nk:stranka>
    7.34 +
    7.35 +</jsp:root>
     8.1 --- a/java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag	Tue Jun 08 07:37:05 2010 +0200
     8.2 +++ b/java/nekurak.net-web/web/WEB-INF/tags/nekurak/komentareVypis.tag	Tue Jun 08 09:09:17 2010 +0200
     8.3 @@ -27,8 +27,16 @@
     8.4  		    <form method="post" action="?akce=odeslatKomentar">
     8.5  		    <fieldset>
     8.6  			<input type="hidden" name="podnik" maxlength="255" value="${podnik.id}"/>
     8.7 -			<label><fmt:message key="komentare.nadpis"/>: <input type="text" name="nadpis" maxlength="255"/></label><br/>
     8.8 -			<textarea name="komentar" cols="30" rows="10"></textarea><br/>
     8.9 +			<label><fmt:message key="komentare.nadpis"/>: <input type="text" name="nadpis" maxlength="255"/></label>
    8.10 +			<br/>
    8.11 +			<textarea name="komentar" cols="30" rows="10"></textarea>
    8.12 +			<br/>
    8.13 +			<select name="typ">
    8.14 +			    <option value="PROSTY_TEXT" selected="selected"><fmt:message key="komentar.typ.prostyText"/></option>
    8.15 +			    <option value="XHTML"><fmt:message key="komentar.typ.xhtml"/></option>
    8.16 +			    <option value="TEXY"><fmt:message key="komentar.typ.texy"/></option>
    8.17 +			</select>
    8.18 +			<br/>
    8.19  			<button value="submit"><fmt:message key="komentare.tlacitkoOdeslat"/></button>
    8.20  		    </fieldset>
    8.21  		</form>
     9.1 --- a/java/nekurak.net-web/web/index.jsp	Tue Jun 08 07:37:05 2010 +0200
     9.2 +++ b/java/nekurak.net-web/web/index.jsp	Tue Jun 08 09:09:17 2010 +0200
     9.3 @@ -40,6 +40,9 @@
     9.4  	<c:when test="${param.akce == 'prihlaseni'}">
     9.5  	    <jsp:include page="/WEB-INF/casti/prihlaseni.jsp" flush="false"/>
     9.6  	</c:when>
     9.7 +	<c:when test="${param.akce == 'odeslatKomentar'}">
     9.8 +	    <jsp:include page="/WEB-INF/casti/odeslatKomentar.jsp" flush="false"/>
     9.9 +	</c:when>
    9.10  	<c:otherwise>
    9.11  	    <jsp:include page="/WEB-INF/casti/uvod.jsp" flush="false"/>
    9.12  	</c:otherwise>