# HG changeset patch # User František Kučera # Date 1274720443 -7200 # Node ID d91f600c464541054396e62fec3559224d21b157 # Parent 1c52b1a4a18ac93727337537ee51a2214da98e04 Adaptér pro Texy (volání vzdálené služby) + základní testy. diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/nbproject/project.properties --- a/java/nekurak.net-ejb/nbproject/project.properties Thu Apr 29 14:50:15 2010 +0200 +++ b/java/nekurak.net-ejb/nbproject/project.properties Mon May 24 19:00:43 2010 +0200 @@ -32,7 +32,6 @@ javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir}:\ - ${libs.junit.classpath}:\ ${libs.junit_4.classpath} javadoc.additionalparam= javadoc.author=false diff -r 1c52b1a4a18a -r d91f600c4645 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 Thu Apr 29 14:50:15 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java Mon May 24 19:00:43 2010 +0200 @@ -3,7 +3,6 @@ import cz.frantovo.nekurak.dto.Podnik; import cz.frantovo.nekurak.dto.VysledekHlasovani; import cz.frantovo.superDAO.SuperDAO; -import java.math.BigInteger; import java.util.Collection; import java.util.Date; import java.util.List; @@ -63,6 +62,12 @@ em.merge(p); } + /** + * Zaznamená hlas uživatele, zda se v podniku má nebo nemá kouřit + * @param podnik podnik o kterém se hlasuje + * @param hlas true = kouřit | false = nekouřit + * @param ipAdresa identifikujeme pomocí ní uživatele + */ public void hlasuj(int podnik, boolean hlas, String ipAdresa) { Query insert = em.createNativeQuery(getSQL(SQL.HLASOVANI_INSERT)); insert.setParameter("podnik", podnik); diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml Thu Apr 29 14:50:15 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml Mon May 24 19:00:43 2010 +0200 @@ -9,7 +9,7 @@ diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java Thu Apr 29 14:50:15 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -package cz.frantovo.nekurak.ejb; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * TODO: přesunout jinam a převést na EJB. - * @author fiki - */ -public class Geo { - - private static final Logger log = Logger.getLogger(Geo.class.getSimpleName()); - - /** - * Převede poštovní adresu na zeměpisné souřadnice. - * @param adresa - * @return souřadnice k dané adrese nebo null, v případě chyby. - */ - public Souradnice getSouradnice(String adresa) { - try { - - /** - * TODO: naprosto zprasené → předělat → - * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing - */ - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Document d = db.parse(sestavURL(adresa)); - NodeList mista = d.getElementsByTagName("location"); - Node misto = mista.item(0); - NodeList potomci = misto.getChildNodes(); - String delka = null; - String sirka = null; - for (int i = 0; i < potomci.getLength(); i++) { - Node p = potomci.item(i); - System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent()); - if ("lat".equals(p.getNodeName())) { - sirka = p.getTextContent(); - } - if ("lng".equals(p.getNodeName())) { - delka = p.getTextContent(); - } - } - - if (sirka == null || delka == null) { - log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa); - return null; - } else { - return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka)); - } - } catch (Exception e) { - log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e); - return null; - } - } - - private static String sestavURL(String adresa) throws UnsupportedEncodingException { - return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8"); - } - - public class Souradnice { - - private double sirka; - private double delka; - - @Override - public String toString() { - return "šířka = " + sirka + "; délka = " + delka + ";"; - } - - public Souradnice(double sirka, double delka) { - this.sirka = sirka; - this.delka = delka; - } - - public String getLoc() { - return "Loc: " + sirka + ", " + delka; - } - - public double getDelka() { - return delka; - } - - public double getSirka() { - return sirka; - } - - public void setDelka(double delka) { - this.delka = delka; - } - - public void setSirka(double sirka) { - this.sirka = sirka; - } - } -} diff -r 1c52b1a4a18a -r d91f600c4645 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 Thu Apr 29 14:50:15 2010 +0200 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java Mon May 24 19:00:43 2010 +0200 @@ -3,11 +3,9 @@ import cz.frantovo.nekurak.dao.PodnikDAO; import cz.frantovo.nekurak.dto.Podnik; import cz.frantovo.nekurak.dto.VysledekHlasovani; -import cz.frantovo.nekurak.ejb.Geo.Souradnice; -import java.lang.String; +import cz.frantovo.nekurak.ext.Geo; +import cz.frantovo.nekurak.ext.Geo.Souradnice; 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; diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Geo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Geo.java Mon May 24 19:00:43 2010 +0200 @@ -0,0 +1,102 @@ +package cz.frantovo.nekurak.ext; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * TODO: přesunout jinam a převést na EJB. + * @author fiki + */ +public class Geo { + + private static final Logger log = Logger.getLogger(Geo.class.getSimpleName()); + + /** + * Převede poštovní adresu na zeměpisné souřadnice. + * @param adresa + * @return souřadnice k dané adrese nebo null, v případě chyby. + */ + public Souradnice getSouradnice(String adresa) { + try { + + /** + * TODO: naprosto zprasené → předělat → + * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing + */ + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document d = db.parse(sestavURL(adresa)); + NodeList mista = d.getElementsByTagName("location"); + Node misto = mista.item(0); + NodeList potomci = misto.getChildNodes(); + String delka = null; + String sirka = null; + for (int i = 0; i < potomci.getLength(); i++) { + Node p = potomci.item(i); + System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent()); + if ("lat".equals(p.getNodeName())) { + sirka = p.getTextContent(); + } + if ("lng".equals(p.getNodeName())) { + delka = p.getTextContent(); + } + } + + if (sirka == null || delka == null) { + log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa); + return null; + } else { + return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka)); + } + } catch (Exception e) { + log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e); + return null; + } + } + + private static String sestavURL(String adresa) throws UnsupportedEncodingException { + return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8"); + } + + public class Souradnice { + + private double sirka; + private double delka; + + @Override + public String toString() { + return "šířka = " + sirka + "; délka = " + delka + ";"; + } + + public Souradnice(double sirka, double delka) { + this.sirka = sirka; + this.delka = delka; + } + + public String getLoc() { + return "Loc: " + sirka + ", " + delka; + } + + public double getDelka() { + return delka; + } + + public double getSirka() { + return sirka; + } + + public void setDelka(double delka) { + this.delka = delka; + } + + public void setSirka(double sirka) { + this.sirka = sirka; + } + } +} diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Texy.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Texy.java Mon May 24 19:00:43 2010 +0200 @@ -0,0 +1,49 @@ +package cz.frantovo.nekurak.ext; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; + +/** + * Neprovádí vlastní interpretaci Texy syntaxe, ale volá HTTP službu napsanou v PHP. + * @author fiki + */ +public class Texy { + + /** TODO: parametrizovatelnost/localhost ? */ + private static final String URL_SLUZBY = "http://nekurak.net/texy/http/"; + + public String preved(String text) { + try { + URL url = new URL(URL_SLUZBY); + URLConnection spojeni = url.openConnection(); + spojeni.setDoOutput(true); + + /** Odešleme data */ + OutputStreamWriter wr = new OutputStreamWriter(spojeni.getOutputStream()); + wr.write(URLEncoder.encode(text, "UTF-8")); + wr.flush(); + + /** Přijmeme odpověď */ + BufferedReader rd = new BufferedReader(new InputStreamReader(spojeni.getInputStream())); + StringBuffer vysledek = new StringBuffer(); + String radka; + while ((radka = rd.readLine()) != null) { + vysledek.append(radka); + } + + // TODO: → finally + wr.close(); + rd.close(); + + return vysledek.toString(); + } catch (Exception e) { + return "TODO:chyba"; + } finally { + // TODO + } + } +} diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/package-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/package-info.java Mon May 24 19:00:43 2010 +0200 @@ -0,0 +1,5 @@ +/* + * Napojení na externí služby. + */ +package cz.frantovo.nekurak.ext; + diff -r 1c52b1a4a18a -r d91f600c4645 java/nekurak.net-ejb/test/cz/frantovo/nekurak/ext/TexyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/test/cz/frantovo/nekurak/ext/TexyTest.java Mon May 24 19:00:43 2010 +0200 @@ -0,0 +1,31 @@ +package cz.frantovo.nekurak.ext; + +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Testuje spíš dostupnost vzdálené služby a fungování samotného Texy než implementaci javové části – + * ta buď funguje, nebo nefunguje → není potřeba testovat moc do podrobna. + * (testovat by se měla případná parametrizovatelnost – zatím žádná není) + * @author fiki + */ +public class TexyTest { + + private Texy texy = new Texy(); + + @Test + public void prostyText() { + testuj("", ""); + testuj("ahoj", "

ahoj

"); + } + + @Test + public void nadpisy() { + testuj("===Nadpis===", "

Nadpis

"); + } + + private void testuj(String vstup, String pozadovanyVystup) { + String vystup = texy.preved(vstup); + assertEquals(pozadovanyVystup, vystup); + } +}