# HG changeset patch # User František Kučera # Date 1272387860 -7200 # Node ID c2590a59a02a5e011d75fbbacda9e67981bb9dd1 # Parent 374ec52b5b692e5f57b4c88c823b43fcf91fa6d5 Hlasování: funguje zobrazování výsledků i posílání hlasů. diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java Tue Apr 27 17:16:57 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java Tue Apr 27 19:04:20 2010 +0200 @@ -77,8 +77,6 @@ select.setParameter("podnik", podnik); List vysledekDotazu = select.getResultList(); - log.severe("Vracím výsledky pro podnik: " + podnik); - for (Object[] radek : vysledekDotazu) { /** Transponujeme výsledek dotazu */ if ((Boolean) radek[0]) { diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Apr 27 17:16:57 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Tue Apr 27 19:04:20 2010 +0200 @@ -4,7 +4,10 @@ import cz.frantovo.nekurak.dto.Podnik; import cz.frantovo.nekurak.dto.VysledekHlasovani; import cz.frantovo.nekurak.ejb.Geo.Souradnice; +import java.lang.String; import java.util.Collection; +import java.util.Iterator; +import java.util.Set; import java.util.logging.Logger; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; @@ -66,6 +69,7 @@ } public void hlasuj(int podnik, boolean hlas, String ipAdresa) { + podnikDAO.hlasuj(podnik, hlas, ipAdresa); } diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-lib/src/cz/frantovo/nekurak/util/HttpPozadavek.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/util/HttpPozadavek.java Tue Apr 27 19:04:20 2010 +0200 @@ -0,0 +1,34 @@ +package cz.frantovo.nekurak.util; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletRequest; + +/** + * Pomocná třída s funkcemi pro HTTP požadavky. + * @author fiki + */ +public class HttpPozadavek { + + private static List mistniAdresy = new ArrayList(); + + static { + mistniAdresy.add("127.0.0.1"); + } + + /** + * @deprecated TODO: toto je dočasný HACK. + * Správně bychom měli použít ventil a přepsat si IP adresu na správnou, + * abychom pak normálně všude mohli používat getRemoteAddr(); + * @param pozadavek HTTP požadavek + * @return IP adresa (x-forwarded-for) + */ + @Deprecated + public static String getIPadresa(HttpServletRequest pozadavek) { + if (mistniAdresy.contains(pozadavek.getRemoteAddr())) { + return pozadavek.getHeader("x-forwarded-for"); + } else { + return pozadavek.getRemoteAddr(); + } + } +} diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-lib/src/cz/frantovo/nekurak/xml/HlasXML.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-lib/src/cz/frantovo/nekurak/xml/HlasXML.java Tue Apr 27 19:04:20 2010 +0200 @@ -0,0 +1,35 @@ +package cz.frantovo.nekurak.xml; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Jeden hlas od uživatele. + * @author fiki + */ +@XmlRootElement(name="hlas") +public class HlasXML { + + private int podnik; + private boolean kourit; + + @XmlElement + public int getPodnik() { + return podnik; + } + + public void setPodnik(int podnik) { + this.podnik = podnik; + } + + @XmlElement + public boolean isKourit() { + return kourit; + } + + public void setKourit(boolean hlas) { + this.kourit = hlas; + } + + +} diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java --- a/java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java Tue Apr 27 17:16:57 2010 +0200 +++ b/java/nekurak.net-rest/src/java/cz/frantovo/nekurak/rest/ClankyREST.java Tue Apr 27 19:04:20 2010 +0200 @@ -20,7 +20,7 @@ private static final String MIME_XML = "text/xml"; private static final String MIME_TEXT = "text/plain"; private HledacSluzby hledac = new HledacSluzby(); - + /** Vypíšeme seznam všech článků v systému */ @GET @Path("/") diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java Tue Apr 27 19:04:20 2010 +0200 @@ -0,0 +1,29 @@ +package cz.frantovo.nekurak.rest; + +import cz.frantovo.nekurak.util.HttpPozadavek; +import cz.frantovo.nekurak.web.HledacSluzby; +import cz.frantovo.nekurak.xml.HlasXML; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; + +@Path("hlas") +public class HlasovaniREST { + + @Context + HttpServletRequest pozadavek; + private static final String MIME_XML = "text/xml"; + private static final String MIME_TEXT = "text/plain"; + private HledacSluzby hledac = new HledacSluzby(); + + @POST + @Consumes(MIME_XML) + @Produces(MIME_TEXT) + public String hlasuj(HlasXML xml) { + hledac.getPodnikEJB().hlasuj(xml.getPodnik(), xml.isKourit(), HttpPozadavek.getIPadresa(pozadavek)); + return "ok"; + } +} diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-web/web/WEB-INF/web.xml --- a/java/nekurak.net-web/web/WEB-INF/web.xml Tue Apr 27 17:16:57 2010 +0200 +++ b/java/nekurak.net-web/web/WEB-INF/web.xml Tue Apr 27 19:04:20 2010 +0200 @@ -44,6 +44,12 @@ Kaptcha com.google.code.kaptcha.servlet.KaptchaServlet + + Veřejné REST API (pak máme ještě jedno soukromé, kde musí být uživatel přihlášený) + REST + com.sun.jersey.spi.container.servlet.ServletContainer + 1 + @@ -58,6 +64,11 @@ Kaptcha /kaptcha.jpg + + + REST + /zdroje/* + diff -r 374ec52b5b69 -r c2590a59a02a java/nekurak.net-web/web/js/hlasovani.js --- a/java/nekurak.net-web/web/js/hlasovani.js Tue Apr 27 17:16:57 2010 +0200 +++ b/java/nekurak.net-web/web/js/hlasovani.js Tue Apr 27 19:04:20 2010 +0200 @@ -1,9 +1,22 @@ var hlasovani = {}; hlasovani.hlasuj = function (podnik, hlas) { - if (hlas) { - alert("Hlasuješ ANO:" + hlas + "pro podnik " + podnik); - } else { - alert("Hlasuješ NE:" + hlas + "pro podnik " + podnik); - } + var pozadavek = "" + hlas + "" + podnik + ""; + + $.ajax({ + type: "POST", + url: "zdroje/hlas/", + data: pozadavek, + contentType: "text/xml", + dataType: "text", + success: function(odpoved) { + if (odpoved == "ok") { + /** TODO: předělat informaci – nepoužívat alert ale text v SVG */ + alert("Váš hlas byl přijat."); + } else { + /** TODO: předělat ošetřování chyb */ + alert("Při hlasování došlo k chybě."); + } + } + }); };