franta-hg@119: package cz.frantovo.nekurak.ext; franta-hg@119: franta-hg@132: import cz.frantovo.nekurak.vyjimky.TexyVyjimka; franta-hg@119: import java.io.BufferedReader; franta-hg@132: import java.io.IOException; franta-hg@119: import java.io.InputStreamReader; franta-hg@119: import java.io.OutputStreamWriter; franta-hg@119: import java.net.URL; franta-hg@119: import java.net.URLConnection; franta-hg@119: import java.net.URLEncoder; franta-hg@132: import java.util.logging.Level; franta-hg@132: import java.util.logging.Logger; franta-hg@119: franta-hg@119: /** franta-hg@119: * Neprovádí vlastní interpretaci Texy syntaxe, ale volá HTTP službu napsanou v PHP. franta-hg@132: * TODO: použít webové služby, nebo něco lepšího než ruční práci s URL. franta-hg@119: * @author fiki franta-hg@119: */ franta-hg@119: public class Texy { franta-hg@119: franta-hg@145: /** TODO: parametrizovatelnost */ franta-hg@145: private static final String URL_SLUZBY = "http://nekurak.net/texy/http/"; franta-hg@145: private static final String KODOVANI = "UTF-8"; franta-hg@145: private static final Logger log = Logger.getLogger(Texy.class.getSimpleName()); franta-hg@119: franta-hg@145: public String preved(String text) throws TexyVyjimka { franta-hg@145: OutputStreamWriter wr = null; franta-hg@145: BufferedReader rd = null; franta-hg@145: try { franta-hg@145: URL url = new URL(URL_SLUZBY); franta-hg@145: URLConnection spojeni = url.openConnection(); franta-hg@145: spojeni.setDoOutput(true); franta-hg@119: franta-hg@145: /** Odešleme data */ franta-hg@145: wr = new OutputStreamWriter(spojeni.getOutputStream()); franta-hg@145: wr.write(URLEncoder.encode(text, KODOVANI)); franta-hg@145: wr.flush(); franta-hg@119: franta-hg@145: /** Přijmeme odpověď */ franta-hg@145: rd = new BufferedReader(new InputStreamReader(spojeni.getInputStream(), KODOVANI)); franta-hg@145: StringBuilder vysledek = new StringBuilder(); franta-hg@145: String radka; franta-hg@145: while ((radka = rd.readLine()) != null) { franta-hg@145: vysledek.append(radka); franta-hg@145: } franta-hg@119: franta-hg@145: return vysledek.toString(); franta-hg@145: } catch (Exception e) { franta-hg@145: throw new TexyVyjimka("Chyba při zpracovávání textu: " + text, e); franta-hg@145: } finally { franta-hg@145: try { franta-hg@145: wr.close(); franta-hg@145: } catch (IOException e) { franta-hg@145: log.log(Level.WARNING, "Selhalo zavírání OutputStreamWriteru", e); franta-hg@145: } franta-hg@145: try { franta-hg@145: rd.close(); franta-hg@145: } catch (IOException e) { franta-hg@145: log.log(Level.WARNING, "Selhalo zavírání BufferedReaderu", e); franta-hg@145: } franta-hg@145: } franta-hg@119: } franta-hg@119: }