java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ext/Texy.java
author František Kučera <franta-hg@frantovo.cz>
Wed Jun 09 18:34:13 2010 +0200 (2010-06-09)
changeset 139 b876839f1989
parent 132 1ca0d7fdbe51
child 145 0efefbf5f8b6
permissions -rw-r--r--
Doplněno explicitní kódování pro data přijímaná od Texy služby,
abychom se nemuseli spoléhat na proměnné prostředí.
franta-hg@119
     1
package cz.frantovo.nekurak.ext;
franta-hg@119
     2
franta-hg@132
     3
import cz.frantovo.nekurak.vyjimky.TexyVyjimka;
franta-hg@119
     4
import java.io.BufferedReader;
franta-hg@132
     5
import java.io.IOException;
franta-hg@119
     6
import java.io.InputStreamReader;
franta-hg@119
     7
import java.io.OutputStreamWriter;
franta-hg@119
     8
import java.net.URL;
franta-hg@119
     9
import java.net.URLConnection;
franta-hg@119
    10
import java.net.URLEncoder;
franta-hg@132
    11
import java.util.logging.Level;
franta-hg@132
    12
import java.util.logging.Logger;
franta-hg@119
    13
franta-hg@119
    14
/**
franta-hg@119
    15
 * Neprovádí vlastní interpretaci Texy syntaxe, ale volá HTTP službu napsanou v PHP.
franta-hg@132
    16
 * TODO: použít webové služby, nebo něco lepšího než ruční práci s URL.
franta-hg@119
    17
 * @author fiki
franta-hg@119
    18
 */
franta-hg@119
    19
public class Texy {
franta-hg@119
    20
franta-hg@132
    21
    /** TODO: parametrizovatelnost */
franta-hg@119
    22
    private static final String URL_SLUZBY = "http://nekurak.net/texy/http/";
franta-hg@139
    23
    private static final String KODOVANI = "UTF-8";
franta-hg@132
    24
    private static final Logger log = Logger.getLogger(Texy.class.getSimpleName());
franta-hg@119
    25
franta-hg@132
    26
    public String preved(String text) throws TexyVyjimka {
franta-hg@132
    27
	OutputStreamWriter wr = null;
franta-hg@132
    28
	BufferedReader rd = null;
franta-hg@119
    29
	try {
franta-hg@119
    30
	    URL url = new URL(URL_SLUZBY);
franta-hg@119
    31
	    URLConnection spojeni = url.openConnection();
franta-hg@119
    32
	    spojeni.setDoOutput(true);
franta-hg@119
    33
franta-hg@119
    34
	    /** Odešleme data */
franta-hg@132
    35
	    wr = new OutputStreamWriter(spojeni.getOutputStream());
franta-hg@139
    36
	    wr.write(URLEncoder.encode(text, KODOVANI));
franta-hg@119
    37
	    wr.flush();
franta-hg@119
    38
franta-hg@119
    39
	    /** Přijmeme odpověď */
franta-hg@139
    40
	    rd = new BufferedReader(new InputStreamReader(spojeni.getInputStream(), KODOVANI));
franta-hg@119
    41
	    StringBuffer vysledek = new StringBuffer();
franta-hg@119
    42
	    String radka;
franta-hg@119
    43
	    while ((radka = rd.readLine()) != null) {
franta-hg@119
    44
		vysledek.append(radka);
franta-hg@119
    45
	    }
franta-hg@119
    46
franta-hg@119
    47
	    return vysledek.toString();
franta-hg@119
    48
	} catch (Exception e) {
franta-hg@132
    49
	    throw new TexyVyjimka("Chyba při zpracovávání textu: " + text, e);
franta-hg@119
    50
	} finally {
franta-hg@132
    51
	    try {
franta-hg@132
    52
		wr.close();
franta-hg@132
    53
	    } catch (IOException e) {
franta-hg@132
    54
		log.log(Level.WARNING, "Selhalo zavírání OutputStreamWriteru", e);
franta-hg@132
    55
	    }
franta-hg@132
    56
	    try {
franta-hg@132
    57
		rd.close();
franta-hg@132
    58
	    } catch (IOException e) {
franta-hg@132
    59
		log.log(Level.WARNING, "Selhalo zavírání BufferedReaderu", e);
franta-hg@132
    60
	    }
franta-hg@119
    61
	}
franta-hg@119
    62
    }
franta-hg@119
    63
}