Adaptér pro Texy (volání vzdálené služby) + základní testy.
1.1 --- a/java/nekurak.net-ejb/nbproject/project.properties Thu Apr 29 14:50:15 2010 +0200
1.2 +++ b/java/nekurak.net-ejb/nbproject/project.properties Mon May 24 19:00:43 2010 +0200
1.3 @@ -32,7 +32,6 @@
1.4 javac.test.classpath=\
1.5 ${javac.classpath}:\
1.6 ${build.classes.dir}:\
1.7 - ${libs.junit.classpath}:\
1.8 ${libs.junit_4.classpath}
1.9 javadoc.additionalparam=
1.10 javadoc.author=false
2.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java Thu Apr 29 14:50:15 2010 +0200
2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java Mon May 24 19:00:43 2010 +0200
2.3 @@ -3,7 +3,6 @@
2.4 import cz.frantovo.nekurak.dto.Podnik;
2.5 import cz.frantovo.nekurak.dto.VysledekHlasovani;
2.6 import cz.frantovo.superDAO.SuperDAO;
2.7 -import java.math.BigInteger;
2.8 import java.util.Collection;
2.9 import java.util.Date;
2.10 import java.util.List;
2.11 @@ -63,6 +62,12 @@
2.12 em.merge(p);
2.13 }
2.14
2.15 + /**
2.16 + * Zaznamená hlas uživatele, zda se v podniku má nebo nemá kouřit
2.17 + * @param podnik podnik o kterém se hlasuje
2.18 + * @param hlas true = kouřit | false = nekouřit
2.19 + * @param ipAdresa identifikujeme pomocí ní uživatele
2.20 + */
2.21 public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
2.22 Query insert = em.createNativeQuery(getSQL(SQL.HLASOVANI_INSERT));
2.23 insert.setParameter("podnik", podnik);
3.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml Thu Apr 29 14:50:15 2010 +0200
3.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml Mon May 24 19:00:43 2010 +0200
3.3 @@ -9,7 +9,7 @@
3.4 <entry key="HLASOVANI_SELECT">
3.5 <!--
3.6 Osoby identifikujeme na základě IP adres.
3.7 - Každá osoba může hlasovat kolikrát chce.
3.8 + Každá osoba může hlasovat kolikrát chce (všechny její hlasy zaznamenáme).
3.9 Ale do výsledků se počítá vždy jen její poslední hlas v daném dni
3.10 (může efektivně hlasovat každý den jednou).
3.11 -->
4.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java Thu Apr 29 14:50:15 2010 +0200
4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
4.3 @@ -1,102 +0,0 @@
4.4 -package cz.frantovo.nekurak.ejb;
4.5 -
4.6 -import java.io.UnsupportedEncodingException;
4.7 -import java.net.URLEncoder;
4.8 -import java.util.logging.Level;
4.9 -import java.util.logging.Logger;
4.10 -import javax.xml.parsers.DocumentBuilder;
4.11 -import javax.xml.parsers.DocumentBuilderFactory;
4.12 -import org.w3c.dom.Document;
4.13 -import org.w3c.dom.Node;
4.14 -import org.w3c.dom.NodeList;
4.15 -
4.16 -/**
4.17 - * TODO: přesunout jinam a převést na EJB.
4.18 - * @author fiki
4.19 - */
4.20 -public class Geo {
4.21 -
4.22 - private static final Logger log = Logger.getLogger(Geo.class.getSimpleName());
4.23 -
4.24 - /**
4.25 - * Převede poštovní adresu na zeměpisné souřadnice.
4.26 - * @param adresa
4.27 - * @return souřadnice k dané adrese nebo null, v případě chyby.
4.28 - */
4.29 - public Souradnice getSouradnice(String adresa) {
4.30 - try {
4.31 -
4.32 - /**
4.33 - * TODO: naprosto zprasené → předělat →
4.34 - * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing
4.35 - */
4.36 - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
4.37 - Document d = db.parse(sestavURL(adresa));
4.38 - NodeList mista = d.getElementsByTagName("location");
4.39 - Node misto = mista.item(0);
4.40 - NodeList potomci = misto.getChildNodes();
4.41 - String delka = null;
4.42 - String sirka = null;
4.43 - for (int i = 0; i < potomci.getLength(); i++) {
4.44 - Node p = potomci.item(i);
4.45 - System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent());
4.46 - if ("lat".equals(p.getNodeName())) {
4.47 - sirka = p.getTextContent();
4.48 - }
4.49 - if ("lng".equals(p.getNodeName())) {
4.50 - delka = p.getTextContent();
4.51 - }
4.52 - }
4.53 -
4.54 - if (sirka == null || delka == null) {
4.55 - log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa);
4.56 - return null;
4.57 - } else {
4.58 - return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka));
4.59 - }
4.60 - } catch (Exception e) {
4.61 - log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e);
4.62 - return null;
4.63 - }
4.64 - }
4.65 -
4.66 - private static String sestavURL(String adresa) throws UnsupportedEncodingException {
4.67 - return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8");
4.68 - }
4.69 -
4.70 - public class Souradnice {
4.71 -
4.72 - private double sirka;
4.73 - private double delka;
4.74 -
4.75 - @Override
4.76 - public String toString() {
4.77 - return "šířka = " + sirka + "; délka = " + delka + ";";
4.78 - }
4.79 -
4.80 - public Souradnice(double sirka, double delka) {
4.81 - this.sirka = sirka;
4.82 - this.delka = delka;
4.83 - }
4.84 -
4.85 - public String getLoc() {
4.86 - return "Loc: " + sirka + ", " + delka;
4.87 - }
4.88 -
4.89 - public double getDelka() {
4.90 - return delka;
4.91 - }
4.92 -
4.93 - public double getSirka() {
4.94 - return sirka;
4.95 - }
4.96 -
4.97 - public void setDelka(double delka) {
4.98 - this.delka = delka;
4.99 - }
4.100 -
4.101 - public void setSirka(double sirka) {
4.102 - this.sirka = sirka;
4.103 - }
4.104 - }
4.105 -}
5.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Thu Apr 29 14:50:15 2010 +0200
5.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Mon May 24 19:00:43 2010 +0200
5.3 @@ -3,11 +3,9 @@
5.4 import cz.frantovo.nekurak.dao.PodnikDAO;
5.5 import cz.frantovo.nekurak.dto.Podnik;
5.6 import cz.frantovo.nekurak.dto.VysledekHlasovani;
5.7 -import cz.frantovo.nekurak.ejb.Geo.Souradnice;
5.8 -import java.lang.String;
5.9 +import cz.frantovo.nekurak.ext.Geo;
5.10 +import cz.frantovo.nekurak.ext.Geo.Souradnice;
5.11 import java.util.Collection;
5.12 -import java.util.Iterator;
5.13 -import java.util.Set;
5.14 import java.util.logging.Logger;
5.15 import javax.annotation.Resource;
5.16 import javax.annotation.security.RolesAllowed;
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Geo.java Mon May 24 19:00:43 2010 +0200
6.3 @@ -0,0 +1,102 @@
6.4 +package cz.frantovo.nekurak.ext;
6.5 +
6.6 +import java.io.UnsupportedEncodingException;
6.7 +import java.net.URLEncoder;
6.8 +import java.util.logging.Level;
6.9 +import java.util.logging.Logger;
6.10 +import javax.xml.parsers.DocumentBuilder;
6.11 +import javax.xml.parsers.DocumentBuilderFactory;
6.12 +import org.w3c.dom.Document;
6.13 +import org.w3c.dom.Node;
6.14 +import org.w3c.dom.NodeList;
6.15 +
6.16 +/**
6.17 + * TODO: přesunout jinam a převést na EJB.
6.18 + * @author fiki
6.19 + */
6.20 +public class Geo {
6.21 +
6.22 + private static final Logger log = Logger.getLogger(Geo.class.getSimpleName());
6.23 +
6.24 + /**
6.25 + * Převede poštovní adresu na zeměpisné souřadnice.
6.26 + * @param adresa
6.27 + * @return souřadnice k dané adrese nebo null, v případě chyby.
6.28 + */
6.29 + public Souradnice getSouradnice(String adresa) {
6.30 + try {
6.31 +
6.32 + /**
6.33 + * TODO: naprosto zprasené → předělat →
6.34 + * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing
6.35 + */
6.36 + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
6.37 + Document d = db.parse(sestavURL(adresa));
6.38 + NodeList mista = d.getElementsByTagName("location");
6.39 + Node misto = mista.item(0);
6.40 + NodeList potomci = misto.getChildNodes();
6.41 + String delka = null;
6.42 + String sirka = null;
6.43 + for (int i = 0; i < potomci.getLength(); i++) {
6.44 + Node p = potomci.item(i);
6.45 + System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent());
6.46 + if ("lat".equals(p.getNodeName())) {
6.47 + sirka = p.getTextContent();
6.48 + }
6.49 + if ("lng".equals(p.getNodeName())) {
6.50 + delka = p.getTextContent();
6.51 + }
6.52 + }
6.53 +
6.54 + if (sirka == null || delka == null) {
6.55 + log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa);
6.56 + return null;
6.57 + } else {
6.58 + return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka));
6.59 + }
6.60 + } catch (Exception e) {
6.61 + log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e);
6.62 + return null;
6.63 + }
6.64 + }
6.65 +
6.66 + private static String sestavURL(String adresa) throws UnsupportedEncodingException {
6.67 + return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8");
6.68 + }
6.69 +
6.70 + public class Souradnice {
6.71 +
6.72 + private double sirka;
6.73 + private double delka;
6.74 +
6.75 + @Override
6.76 + public String toString() {
6.77 + return "šířka = " + sirka + "; délka = " + delka + ";";
6.78 + }
6.79 +
6.80 + public Souradnice(double sirka, double delka) {
6.81 + this.sirka = sirka;
6.82 + this.delka = delka;
6.83 + }
6.84 +
6.85 + public String getLoc() {
6.86 + return "Loc: " + sirka + ", " + delka;
6.87 + }
6.88 +
6.89 + public double getDelka() {
6.90 + return delka;
6.91 + }
6.92 +
6.93 + public double getSirka() {
6.94 + return sirka;
6.95 + }
6.96 +
6.97 + public void setDelka(double delka) {
6.98 + this.delka = delka;
6.99 + }
6.100 +
6.101 + public void setSirka(double sirka) {
6.102 + this.sirka = sirka;
6.103 + }
6.104 + }
6.105 +}
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Texy.java Mon May 24 19:00:43 2010 +0200
7.3 @@ -0,0 +1,49 @@
7.4 +package cz.frantovo.nekurak.ext;
7.5 +
7.6 +import java.io.BufferedReader;
7.7 +import java.io.InputStreamReader;
7.8 +import java.io.OutputStreamWriter;
7.9 +import java.net.URL;
7.10 +import java.net.URLConnection;
7.11 +import java.net.URLEncoder;
7.12 +
7.13 +/**
7.14 + * Neprovádí vlastní interpretaci Texy syntaxe, ale volá HTTP službu napsanou v PHP.
7.15 + * @author fiki
7.16 + */
7.17 +public class Texy {
7.18 +
7.19 + /** TODO: parametrizovatelnost/localhost ? */
7.20 + private static final String URL_SLUZBY = "http://nekurak.net/texy/http/";
7.21 +
7.22 + public String preved(String text) {
7.23 + try {
7.24 + URL url = new URL(URL_SLUZBY);
7.25 + URLConnection spojeni = url.openConnection();
7.26 + spojeni.setDoOutput(true);
7.27 +
7.28 + /** Odešleme data */
7.29 + OutputStreamWriter wr = new OutputStreamWriter(spojeni.getOutputStream());
7.30 + wr.write(URLEncoder.encode(text, "UTF-8"));
7.31 + wr.flush();
7.32 +
7.33 + /** Přijmeme odpověď */
7.34 + BufferedReader rd = new BufferedReader(new InputStreamReader(spojeni.getInputStream()));
7.35 + StringBuffer vysledek = new StringBuffer();
7.36 + String radka;
7.37 + while ((radka = rd.readLine()) != null) {
7.38 + vysledek.append(radka);
7.39 + }
7.40 +
7.41 + // TODO: → finally
7.42 + wr.close();
7.43 + rd.close();
7.44 +
7.45 + return vysledek.toString();
7.46 + } catch (Exception e) {
7.47 + return "TODO:chyba";
7.48 + } finally {
7.49 + // TODO
7.50 + }
7.51 + }
7.52 +}
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
8.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/package-info.java Mon May 24 19:00:43 2010 +0200
8.3 @@ -0,0 +1,5 @@
8.4 +/*
8.5 + * Napojení na externí služby.
8.6 + */
8.7 +package cz.frantovo.nekurak.ext;
8.8 +
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
9.2 +++ b/java/nekurak.net-ejb/test/cz/frantovo/nekurak/ext/TexyTest.java Mon May 24 19:00:43 2010 +0200
9.3 @@ -0,0 +1,31 @@
9.4 +package cz.frantovo.nekurak.ext;
9.5 +
9.6 +import org.junit.Test;
9.7 +import static org.junit.Assert.*;
9.8 +
9.9 +/**
9.10 + * Testuje spíš dostupnost vzdálené služby a fungování samotného Texy než implementaci javové části –
9.11 + * ta buď funguje, nebo nefunguje → není potřeba testovat moc do podrobna.
9.12 + * (testovat by se měla případná parametrizovatelnost – zatím žádná není)
9.13 + * @author fiki
9.14 + */
9.15 +public class TexyTest {
9.16 +
9.17 + private Texy texy = new Texy();
9.18 +
9.19 + @Test
9.20 + public void prostyText() {
9.21 + testuj("", "");
9.22 + testuj("ahoj", "<p>ahoj</p>");
9.23 + }
9.24 +
9.25 + @Test
9.26 + public void nadpisy() {
9.27 + testuj("===Nadpis===", "<h1>Nadpis</h1>");
9.28 + }
9.29 +
9.30 + private void testuj(String vstup, String pozadovanyVystup) {
9.31 + String vystup = texy.preved(vstup);
9.32 + assertEquals(pozadovanyVystup, vystup);
9.33 + }
9.34 +}