Hlasování: DAO a EJB vrstva pro ukládání hlasů, kostra pro načítání výsledků hlasování.
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 – <img src='…'/>"/>
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 && 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 +};