Hlasování: DAO a EJB vrstva pro ukládání hlasů, kostra pro načítání výsledků hlasování.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 27 Apr 2010 16:13:36 +0200
changeset 107e8371105fcc8
parent 106 6209f3d550c5
child 108 f74a9fc683da
Hlasování: DAO a EJB vrstva pro ukládání hlasů, kostra pro načítání výsledků hlasování.
html/graf.svg
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/VysledekHlasovani.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/Detail.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/Hlasovani.java
java/nekurak.net-web/web/WEB-INF/casti/uvod.jsp
java/nekurak.net-web/web/WEB-INF/tags/nekurak/hlasovani.tag
java/nekurak.net-web/web/WEB-INF/tags/nekurak/stranka.tag
java/nekurak.net-web/web/js/hlasovani.js
     1.1 --- a/html/graf.svg	Tue Apr 27 13:14:23 2010 +0200
     1.2 +++ b/html/graf.svg	Tue Apr 27 16:13:36 2010 +0200
     1.3 @@ -42,7 +42,7 @@
     1.4      <!-- pozadí – přechod -->
     1.5      <defs>
     1.6  	<linearGradient id="pozadi_prechod" x1="0%" y1="0%" x2="100%" y2="100%">
     1.7 -	    <stop offset="0%" style="stop-color:white; stop-opacity:0.5"/>
     1.8 +	    <stop offset="20%" style="stop-color:rgb(245,245,255); stop-opacity:0.5"/>
     1.9  	    <stop offset="100%" style="stop-color:silver; stop-opacity:0.8"/>
    1.10  	</linearGradient>
    1.11      </defs>
     2.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Apr 27 13:14:23 2010 +0200
     2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Apr 27 16:13:36 2010 +0200
     2.3 @@ -1,8 +1,10 @@
     2.4  package cz.frantovo.nekurak.dao;
     2.5  
     2.6  import cz.frantovo.nekurak.dto.Podnik;
     2.7 +import cz.frantovo.nekurak.dto.VysledekHlasovani;
     2.8  import java.util.Collection;
     2.9  import java.util.Date;
    2.10 +import java.util.logging.Logger;
    2.11  import javax.ejb.LocalBean;
    2.12  import javax.ejb.Stateless;
    2.13  import javax.persistence.EntityManager;
    2.14 @@ -17,6 +19,7 @@
    2.15  @LocalBean
    2.16  public class PodnikDAO {
    2.17  
    2.18 +    private static final Logger log = Logger.getLogger(PodnikDAO.class.getSimpleName());
    2.19      @PersistenceContext(unitName = DAO.PU)
    2.20      private EntityManager em;
    2.21  
    2.22 @@ -52,4 +55,17 @@
    2.23  
    2.24  	em.merge(p);
    2.25      }
    2.26 +
    2.27 +    public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
    2.28 +	Query insert = em.createNativeQuery("INSERT INTO hlasovani (podnik, hlas, ip_adresa) VALUES (:podnik, :hlas, :ip_adresa);");
    2.29 +	insert.setParameter("podnik", podnik);
    2.30 +	insert.setParameter("hlas", hlas);
    2.31 +	insert.setParameter("ip_adresa", ipAdresa);
    2.32 +	insert.executeUpdate();
    2.33 +    }
    2.34 +
    2.35 +    public VysledekHlasovani getVysledekHlasovani(int podnik) {
    2.36 +	log.severe("TODO: vracet skutečné výsledky z databáze");
    2.37 +	return new VysledekHlasovani(10, 50);
    2.38 +    }
    2.39  }
     3.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Apr 27 13:14:23 2010 +0200
     3.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Apr 27 16:13:36 2010 +0200
     3.3 @@ -2,8 +2,10 @@
     3.4  
     3.5  import cz.frantovo.nekurak.dao.PodnikDAO;
     3.6  import cz.frantovo.nekurak.dto.Podnik;
     3.7 +import cz.frantovo.nekurak.dto.VysledekHlasovani;
     3.8  import cz.frantovo.nekurak.ejb.Geo.Souradnice;
     3.9  import java.util.Collection;
    3.10 +import java.util.logging.Logger;
    3.11  import javax.annotation.Resource;
    3.12  import javax.annotation.security.RolesAllowed;
    3.13  import javax.ejb.EJB;
    3.14 @@ -17,6 +19,7 @@
    3.15  @Stateless
    3.16  public class PodnikEJB implements PodnikRemote {
    3.17  
    3.18 +    private static final Logger log = Logger.getLogger(PodnikEJB.class.getSimpleName());
    3.19      @EJB
    3.20      private PodnikDAO podnikDAO;
    3.21      @Resource
    3.22 @@ -61,4 +64,12 @@
    3.23  
    3.24  	return pocetAktualizovanych;
    3.25      }
    3.26 +
    3.27 +    public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
    3.28 +	podnikDAO.hlasuj(podnik, hlas, ipAdresa);
    3.29 +    }
    3.30 +
    3.31 +    public VysledekHlasovani getVysledekHlasovani(int podnik) {
    3.32 +	return podnikDAO.getVysledekHlasovani(podnik);
    3.33 +    }
    3.34  }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/dto/VysledekHlasovani.java	Tue Apr 27 16:13:36 2010 +0200
     4.3 @@ -0,0 +1,39 @@
     4.4 +package cz.frantovo.nekurak.dto;
     4.5 +
     4.6 +/**
     4.7 + * Agregovaný výsledek hlasování o tom,
     4.8 + * zda se má v daném (jednom) podniku kouřit nebo ne.
     4.9 + * @author fiki
    4.10 + */
    4.11 +public class VysledekHlasovani {
    4.12 +
    4.13 +    private int hlasuAno;
    4.14 +    private int hlasuNe;
    4.15 +
    4.16 +    public VysledekHlasovani(int hlasuAno, int hlasuNe) {
    4.17 +	this.hlasuAno = hlasuAno;
    4.18 +	this.hlasuNe = hlasuNe;
    4.19 +    }
    4.20 +
    4.21 +    /**
    4.22 +     * @return počet hlasů pro kuřácký podnik
    4.23 +     */
    4.24 +    public int getHlasuAno() {
    4.25 +	return hlasuAno;
    4.26 +    }
    4.27 +
    4.28 +    public void setHlasuAno(int pocet) {
    4.29 +	this.hlasuAno = pocet;
    4.30 +    }
    4.31 +
    4.32 +    /**
    4.33 +     * @return počet hlasů pro nekuřácký podnik
    4.34 +     */
    4.35 +    public int getHlasuNe() {
    4.36 +	return hlasuNe;
    4.37 +    }
    4.38 +
    4.39 +    public void setHlasuNe(int pocet) {
    4.40 +	this.hlasuNe = pocet;
    4.41 +    }
    4.42 +}
     5.1 --- a/java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java	Tue Apr 27 13:14:23 2010 +0200
     5.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/ejb/PodnikRemote.java	Tue Apr 27 16:13:36 2010 +0200
     5.3 @@ -1,6 +1,7 @@
     5.4  package cz.frantovo.nekurak.ejb;
     5.5  
     5.6  import cz.frantovo.nekurak.dto.Podnik;
     5.7 +import cz.frantovo.nekurak.dto.VysledekHlasovani;
     5.8  import java.util.Collection;
     5.9  import javax.ejb.Remote;
    5.10  
    5.11 @@ -20,4 +21,18 @@
    5.12      public Podnik getPodnik(int id);
    5.13  
    5.14      public int dopocitejSouradnice();
    5.15 +
    5.16 +    /**
    5.17 +     * Zaznamená hlas uživatele
    5.18 +     * @param podnik ID podniku
    5.19 +     * @param hlas true = kuřácký | false = nekuřácký
    5.20 +     * @param ipAdresa IP adresa uživatele, který hlasuje
    5.21 +     */
    5.22 +    public void hlasuj(int podnik, boolean hlas, String ipAdresa);
    5.23 +
    5.24 +    /**
    5.25 +     * @param podnik ID podniku
    5.26 +     * @return agregované výsledky hlasování pro daný podnik
    5.27 +     */
    5.28 +    public VysledekHlasovani getVysledekHlasovani(int podnik);
    5.29  }
     6.1 --- a/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/Detail.java	Tue Apr 27 13:14:23 2010 +0200
     6.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/Detail.java	Tue Apr 27 16:13:36 2010 +0200
     6.3 @@ -3,8 +3,6 @@
     6.4  import cz.frantovo.nekurak.dto.Podnik;
     6.5  import java.io.UnsupportedEncodingException;
     6.6  import java.net.URLEncoder;
     6.7 -import java.util.logging.Level;
     6.8 -import java.util.logging.Logger;
     6.9  
    6.10  /**
    6.11   *
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/Hlasovani.java	Tue Apr 27 16:13:36 2010 +0200
     7.3 @@ -0,0 +1,25 @@
     7.4 +package cz.frantovo.nekurak.web;
     7.5 +
     7.6 +import cz.frantovo.nekurak.dto.VysledekHlasovani;
     7.7 +
     7.8 +/**
     7.9 + *
    7.10 + * @author fiki
    7.11 + */
    7.12 +public class Hlasovani {
    7.13 +
    7.14 +    private HledacSluzby hledac = new HledacSluzby();
    7.15 +    private int podnik;
    7.16 +    private VysledekHlasovani vysledek;
    7.17 +
    7.18 +    public void setPodnik(int podnik) {
    7.19 +	this.podnik = podnik;
    7.20 +    }
    7.21 +
    7.22 +    public VysledekHlasovani getVysledek() {
    7.23 +	if (vysledek == null) {
    7.24 +	    vysledek = hledac.getPodnikEJB().getVysledekHlasovani(podnik);
    7.25 +	}
    7.26 +	return vysledek;
    7.27 +    }
    7.28 +}
     8.1 --- a/java/nekurak.net-web/web/WEB-INF/casti/uvod.jsp	Tue Apr 27 13:14:23 2010 +0200
     8.2 +++ b/java/nekurak.net-web/web/WEB-INF/casti/uvod.jsp	Tue Apr 27 16:13:36 2010 +0200
     8.3 @@ -35,7 +35,7 @@
     8.4  
     8.5  		<!-- Hlasování a graf -->
     8.6  		<div class="hlasovani">
     8.7 -		    <nk:hlasovani podnik="${p.id}" hlasuAno="5" hlasuNe="10"/>
     8.8 +		    <nk:hlasovani podnik="${p.id}"/>
     8.9  		</div>
    8.10  
    8.11  		<!-- Fotky podniku -->
     9.1 --- a/java/nekurak.net-web/web/WEB-INF/tags/nekurak/hlasovani.tag	Tue Apr 27 13:14:23 2010 +0200
     9.2 +++ b/java/nekurak.net-web/web/WEB-INF/tags/nekurak/hlasovani.tag	Tue Apr 27 16:13:36 2010 +0200
     9.3 @@ -6,14 +6,23 @@
     9.4  	  version="2.0">
     9.5  
     9.6      <jsp:directive.attribute name="podnik" type="java.lang.Integer" required="true" description="ID podniku"/>
     9.7 -    <jsp:directive.attribute name="hlasuAno" type="java.lang.Integer" required="true" description="počet hlasů pro ano – aby se tu kouřilo"/>
     9.8 -    <jsp:directive.attribute name="hlasuNe" type="java.lang.Integer" required="true" description="počet hlasů pro ne – aby se tu nekouřilo"/>
     9.9 +    <jsp:directive.attribute name="hlasuAno" type="java.lang.Integer" required="false" description="počet hlasů pro ano – aby se tu kouřilo"/>
    9.10 +    <jsp:directive.attribute name="hlasuNe" type="java.lang.Integer" required="false" description="počet hlasů pro ne – aby se tu nekouřilo"/>
    9.11      <jsp:directive.attribute name="svgUvnitrXhtml" type="java.lang.Boolean" required="false" description="true = SVG vložené přímo do XHTML (XML) | false = SVG jako externí obrázek – &lt;img src='…'/&gt;"/>
    9.12  
    9.13 +    <!-- výchozí hodnota -->
    9.14      <c:if test="${svgUvnitrXhtml == null}">
    9.15  	<c:set var="svgUvnitrXhtml" value="${true}"/>
    9.16      </c:if>
    9.17  
    9.18 +    <!-- hodnoty nejsou uvedeny → načteme si je -->
    9.19 +    <c:if test="${hlasuAno == null || hlasuNe == null}">
    9.20 +	<jsp:useBean id="hlasovani" class="cz.frantovo.nekurak.web.Hlasovani" scope="request"/>
    9.21 +	<jsp:setProperty name="hlasovani" property="podnik" value="${podnik}"/>
    9.22 +	<c:set var="hlasuAno" value="${hlasovani.vysledek.hlasuAno}"/>
    9.23 +	<c:set var="hlasuNe" value="${hlasovani.vysledek.hlasuNe}"/>
    9.24 +    </c:if>
    9.25 +
    9.26      <c:choose>
    9.27  	<c:when test="${svgUvnitrXhtml}">
    9.28  	    <svg width="200" height="200"
    9.29 @@ -59,7 +68,7 @@
    9.30  		<!-- pozadí – přechod -->
    9.31  		<defs>
    9.32  		    <linearGradient id="pozadi_prechod" x1="0%" y1="0%" x2="100%" y2="100%">
    9.33 -			<stop offset="0%" style="stop-color:white; stop-opacity:0.5"/>
    9.34 +			<stop offset="20%" style="stop-color:rgb(245,245,255); stop-opacity:0.5"/>
    9.35  			<stop offset="100%" style="stop-color:silver; stop-opacity:0.8"/>
    9.36  		    </linearGradient>
    9.37  		</defs>
    9.38 @@ -92,19 +101,28 @@
    9.39  		<rect x="0" y="0" width="200" height="200" class="pozadi"/>
    9.40  		<line x1="10" y1="180" x2="190" y2="180" class="ramecek"/>
    9.41  
    9.42 -		<!-- Nadpis grafu -->
    9.43 +		<!-- nadpis grafu -->
    9.44  		<text x="60" y="20">Mělo by se tu:</text>
    9.45  
    9.46 +		<!-- žádné hlasy -->
    9.47 +		<c:if test="${hlasuAno == 0 &amp;&amp; hlasuNe == 0}">
    9.48 +		    <text x="30" y="100">(zatím nikdo nehlasoval)</text>
    9.49 +		</c:if>
    9.50 +
    9.51 +		<!-- vypočteme si výšky sloupců grafu -->
    9.52 +		<c:set var="hlasuNeVyska" value="${150*hlasuNe/(hlasuAno+hlasuNe)}"/>
    9.53 +		<c:set var="hlasuAnoVyska" value="${150*hlasuAno/(hlasuAno+hlasuNe)}"/>
    9.54 +
    9.55  		<!-- nekuřáci -->
    9.56 -		<a xlink:href="javascript:alert('To čumíš, co? :-)')" xlink:title="Hlasů: ${hlasuNe}">
    9.57 +		<a xlink:href="javascript:hlasovani.hlasuj(${podnik}, false);" xlink:title="hlasů: ${hlasuNe}">
    9.58  		    <text x="30" y="195" class="ne">nekouřit</text>
    9.59 -		    <rect x="30" y="${180 - (150*hlasuNe/(hlasuAno+hlasuNe))}" width="50" height="${150*hlasuNe/(hlasuAno+hlasuNe)}" class="ne"/>
    9.60 +		    <rect x="30" y="${180 - hlasuNeVyska}" width="50" height="${hlasuNeVyska}" class="ne"/>
    9.61  		</a>
    9.62  
    9.63  		<!-- kuřáci -->
    9.64 -		<a xlink:href="javascript:alert('To čumíš, co? :-)')" xlink:title="Hlasů: ${hlasuAno}">
    9.65 +		<a xlink:href="javascript:hlasovani.hlasuj(${podnik}, true);" xlink:title="hlasů: ${hlasuAno}">
    9.66  		    <text x="130" y="195" class="ano">kouřit</text>
    9.67 -		    <rect x="120" y="${180 - (150*hlasuAno/(hlasuAno+hlasuNe))}" width="50" height="${150*hlasuAno/(hlasuAno+hlasuNe)}" class="ano"/>
    9.68 +		    <rect x="120" y="${180 - hlasuAnoVyska}" width="50" height="${hlasuAnoVyska}" class="ano"/>
    9.69  		</a>
    9.70  	    </svg>
    9.71  	</c:when>
    10.1 --- a/java/nekurak.net-web/web/WEB-INF/tags/nekurak/stranka.tag	Tue Apr 27 13:14:23 2010 +0200
    10.2 +++ b/java/nekurak.net-web/web/WEB-INF/tags/nekurak/stranka.tag	Tue Apr 27 16:13:36 2010 +0200
    10.3 @@ -29,6 +29,7 @@
    10.4  	    <link href="styl.css" type="text/css" rel="StyleSheet"/>
    10.5  	    <script type="text/javascript" src="js/jquery.js"></script>
    10.6  	    <script type="text/javascript" src="js/jquery.bxSlider.js"></script>
    10.7 +	    <script type="text/javascript" src="js/hlasovani.js"></script>
    10.8  	    <link rel="alternate" type="application/atom+xml" title="podniky" href="atom/" />
    10.9  	</head>
   10.10  	<body>
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/java/nekurak.net-web/web/js/hlasovani.js	Tue Apr 27 16:13:36 2010 +0200
    11.3 @@ -0,0 +1,9 @@
    11.4 +var hlasovani = {};
    11.5 +
    11.6 +hlasovani.hlasuj = function (podnik, hlas) {
    11.7 +    if (hlas) {
    11.8 +	alert("Hlasuješ ANO:" + hlas + "pro podnik " + podnik);
    11.9 +    } else {
   11.10 +	alert("Hlasuješ NE:" + hlas + "pro podnik " + podnik);
   11.11 +    }
   11.12 +};