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