Adaptér pro Texy (volání vzdálené služby) + základní testy.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Mon, 24 May 2010 19:00:43 +0200
changeset 119d91f600c4645
parent 118 1c52b1a4a18a
child 120 052107272005
Adaptér pro Texy (volání vzdálené služby) + základní testy.
java/nekurak.net-ejb/nbproject/project.properties
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Geo.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Texy.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/package-info.java
java/nekurak.net-ejb/test/cz/frantovo/nekurak/ext/TexyTest.java
     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 +}