Hlasování: funguje zobrazování výsledků i posílání hlasů.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue, 27 Apr 2010 19:04:20 +0200
changeset 110c2590a59a02a
parent 109 374ec52b5b69
child 111 401cc563a0c1
Hlasování: funguje zobrazování výsledků i posílání hlasů.
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/util/HttpPozadavek.java
java/nekurak.net-lib/src/cz/frantovo/nekurak/xml/HlasXML.java
java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java
java/nekurak.net-web/web/WEB-INF/web.xml
java/nekurak.net-web/web/js/hlasovani.js
     1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Apr 27 17:16:57 2010 +0200
     1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Tue Apr 27 19:04:20 2010 +0200
     1.3 @@ -77,8 +77,6 @@
     1.4  	select.setParameter("podnik", podnik);
     1.5  	List<Object[]> vysledekDotazu = select.getResultList();
     1.6  
     1.7 -	log.severe("Vracím výsledky pro podnik: " + podnik);
     1.8 -
     1.9  	for (Object[] radek : vysledekDotazu) {
    1.10  	    /** Transponujeme výsledek dotazu */
    1.11  	    if ((Boolean) radek[0]) {
     2.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Apr 27 17:16:57 2010 +0200
     2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java	Tue Apr 27 19:04:20 2010 +0200
     2.3 @@ -4,7 +4,10 @@
     2.4  import cz.frantovo.nekurak.dto.Podnik;
     2.5  import cz.frantovo.nekurak.dto.VysledekHlasovani;
     2.6  import cz.frantovo.nekurak.ejb.Geo.Souradnice;
     2.7 +import java.lang.String;
     2.8  import java.util.Collection;
     2.9 +import java.util.Iterator;
    2.10 +import java.util.Set;
    2.11  import java.util.logging.Logger;
    2.12  import javax.annotation.Resource;
    2.13  import javax.annotation.security.RolesAllowed;
    2.14 @@ -66,6 +69,7 @@
    2.15      }
    2.16  
    2.17      public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
    2.18 +
    2.19  	podnikDAO.hlasuj(podnik, hlas, ipAdresa);
    2.20      }
    2.21  
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/HttpPozadavek.java	Tue Apr 27 19:04:20 2010 +0200
     3.3 @@ -0,0 +1,34 @@
     3.4 +package cz.frantovo.nekurak.util;
     3.5 +
     3.6 +import java.util.ArrayList;
     3.7 +import java.util.List;
     3.8 +import javax.servlet.http.HttpServletRequest;
     3.9 +
    3.10 +/**
    3.11 + * Pomocná třída s funkcemi pro HTTP požadavky.
    3.12 + * @author fiki
    3.13 + */
    3.14 +public class HttpPozadavek {
    3.15 +
    3.16 +    private static List<String> mistniAdresy = new ArrayList<String>();
    3.17 +
    3.18 +    static {
    3.19 +	mistniAdresy.add("127.0.0.1");
    3.20 +    }
    3.21 +
    3.22 +    /**
    3.23 +     * @deprecated TODO: toto je dočasný HACK.
    3.24 +     * Správně bychom měli použít ventil a přepsat si IP adresu na správnou,
    3.25 +     * abychom pak normálně všude mohli používat getRemoteAddr();
    3.26 +     * @param pozadavek HTTP požadavek
    3.27 +     * @return IP adresa (x-forwarded-for)
    3.28 +     */
    3.29 +    @Deprecated
    3.30 +    public static String getIPadresa(HttpServletRequest pozadavek) {
    3.31 +	if (mistniAdresy.contains(pozadavek.getRemoteAddr())) {
    3.32 +	    return pozadavek.getHeader("x-forwarded-for");
    3.33 +	} else {
    3.34 +	    return pozadavek.getRemoteAddr();
    3.35 +	}
    3.36 +    }
    3.37 +}
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/xml/HlasXML.java	Tue Apr 27 19:04:20 2010 +0200
     4.3 @@ -0,0 +1,35 @@
     4.4 +package cz.frantovo.nekurak.xml;
     4.5 +
     4.6 +import javax.xml.bind.annotation.XmlElement;
     4.7 +import javax.xml.bind.annotation.XmlRootElement;
     4.8 +
     4.9 +/**
    4.10 + * Jeden hlas od uživatele.
    4.11 + * @author fiki
    4.12 + */
    4.13 +@XmlRootElement(name="hlas")
    4.14 +public class HlasXML {
    4.15 +
    4.16 +    private int podnik;
    4.17 +    private boolean kourit;
    4.18 +
    4.19 +    @XmlElement
    4.20 +    public int getPodnik() {
    4.21 +	return podnik;
    4.22 +    }
    4.23 +
    4.24 +    public void setPodnik(int podnik) {
    4.25 +	this.podnik = podnik;
    4.26 +    }
    4.27 +
    4.28 +    @XmlElement
    4.29 +    public boolean isKourit() {
    4.30 +	return kourit;
    4.31 +    }
    4.32 +
    4.33 +    public void setKourit(boolean hlas) {
    4.34 +	this.kourit = hlas;
    4.35 +    }
    4.36 +    
    4.37 +
    4.38 +}
     5.1 --- a/java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java	Tue Apr 27 17:16:57 2010 +0200
     5.2 +++ b/java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java	Tue Apr 27 19:04:20 2010 +0200
     5.3 @@ -20,7 +20,7 @@
     5.4      private static final String MIME_XML = "text/xml";
     5.5      private static final String MIME_TEXT = "text/plain";
     5.6      private HledacSluzby hledac = new HledacSluzby();
     5.7 -
     5.8 +    
     5.9      /** Vypíšeme seznam všech článků v systému */
    5.10      @GET
    5.11      @Path("/")
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java	Tue Apr 27 19:04:20 2010 +0200
     6.3 @@ -0,0 +1,29 @@
     6.4 +package cz.frantovo.nekurak.rest;
     6.5 +
     6.6 +import cz.frantovo.nekurak.util.HttpPozadavek;
     6.7 +import cz.frantovo.nekurak.web.HledacSluzby;
     6.8 +import cz.frantovo.nekurak.xml.HlasXML;
     6.9 +import javax.servlet.http.HttpServletRequest;
    6.10 +import javax.ws.rs.Consumes;
    6.11 +import javax.ws.rs.POST;
    6.12 +import javax.ws.rs.Path;
    6.13 +import javax.ws.rs.Produces;
    6.14 +import javax.ws.rs.core.Context;
    6.15 +
    6.16 +@Path("hlas")
    6.17 +public class HlasovaniREST {
    6.18 +
    6.19 +    @Context
    6.20 +    HttpServletRequest pozadavek;
    6.21 +    private static final String MIME_XML = "text/xml";
    6.22 +    private static final String MIME_TEXT = "text/plain";
    6.23 +    private HledacSluzby hledac = new HledacSluzby();
    6.24 +
    6.25 +    @POST
    6.26 +    @Consumes(MIME_XML)
    6.27 +    @Produces(MIME_TEXT)
    6.28 +    public String hlasuj(HlasXML xml) {
    6.29 +	hledac.getPodnikEJB().hlasuj(xml.getPodnik(), xml.isKourit(), HttpPozadavek.getIPadresa(pozadavek));
    6.30 +	return "ok";
    6.31 +    }
    6.32 +}
     7.1 --- a/java/nekurak.net-web/web/WEB-INF/web.xml	Tue Apr 27 17:16:57 2010 +0200
     7.2 +++ b/java/nekurak.net-web/web/WEB-INF/web.xml	Tue Apr 27 19:04:20 2010 +0200
     7.3 @@ -44,6 +44,12 @@
     7.4  	<servlet-name>Kaptcha</servlet-name>
     7.5  	<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
     7.6      </servlet>
     7.7 +    <servlet>
     7.8 +	<description>Veřejné REST API (pak máme ještě jedno soukromé, kde musí být uživatel přihlášený)</description>
     7.9 +	<servlet-name>REST</servlet-name>
    7.10 +	<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    7.11 +	<load-on-startup>1</load-on-startup>
    7.12 +    </servlet>
    7.13      <!-- </definiceServletů> -->
    7.14      <!-- <mapováníServletů> -->
    7.15      <servlet-mapping>
    7.16 @@ -58,6 +64,11 @@
    7.17  	<servlet-name>Kaptcha</servlet-name>
    7.18  	<url-pattern>/kaptcha.jpg</url-pattern>
    7.19      </servlet-mapping>
    7.20 +    <servlet-mapping>
    7.21 +	<!-- Veřejné REST API -->
    7.22 +	<servlet-name>REST</servlet-name>
    7.23 +	<url-pattern>/zdroje/*</url-pattern>
    7.24 +    </servlet-mapping>
    7.25      <!-- </mapováníServletů> -->
    7.26      <context-param>
    7.27  	<!-- Pro případ, že chybí hlavička „Accept-language“ v HTTP požadavku -->
     8.1 --- a/java/nekurak.net-web/web/js/hlasovani.js	Tue Apr 27 17:16:57 2010 +0200
     8.2 +++ b/java/nekurak.net-web/web/js/hlasovani.js	Tue Apr 27 19:04:20 2010 +0200
     8.3 @@ -1,9 +1,22 @@
     8.4  var hlasovani = {};
     8.5  
     8.6  hlasovani.hlasuj = function (podnik, hlas) {
     8.7 -    if (hlas) {
     8.8 -	alert("Hlasuješ ANO:" + hlas + "pro podnik " + podnik);
     8.9 -    } else {
    8.10 -	alert("Hlasuješ NE:" + hlas + "pro podnik " + podnik);
    8.11 -    }
    8.12 +    var pozadavek = "<hlas><kourit>" + hlas + "</kourit><podnik>" + podnik + "</podnik></hlas>";
    8.13 +
    8.14 +    $.ajax({
    8.15 +	type: "POST",
    8.16 +	url: "zdroje/hlas/",
    8.17 +	data: pozadavek,
    8.18 +	contentType: "text/xml",
    8.19 +	dataType: "text",
    8.20 +	success: function(odpoved) {
    8.21 +	    if (odpoved == "ok") {
    8.22 +		/** TODO: předělat informaci – nepoužívat alert ale text v SVG */
    8.23 +		alert("Váš hlas byl přijat.");
    8.24 +	    } else {
    8.25 +		/** TODO: předělat ošetřování chyb */
    8.26 +		alert("Při hlasování došlo k chybě.");
    8.27 +	    }
    8.28 +	}
    8.29 +    });
    8.30  };