2 * XML Web generátor – program na generování webových stránek
3 * Copyright © 2012 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package cz.frantovo.xmlWebGenerator.makra;
20 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.načtiProud;
22 import java.io.PrintStream;
24 import java.util.Collections;
25 import java.util.HashMap;
29 * Provedeme skript a do stránky vložíme jeho výstup.
31 * @author František Kučera (frantovo.cz)
33 public class Skriptování {
36 * klíč = jazyk – např. bash
37 * hodnota = interpret – např. /bin/bash
39 private static final Map<String, String> interpreti;
42 Map<String, String> podporovanýJazyk = new HashMap<String, String>();
43 podporovanýJazyk.put("bash", "/bin/bash");
44 podporovanýJazyk.put("perl", "/usr/bin/perl");
45 podporovanýJazyk.put("php", "/usr/bin/php");
46 podporovanýJazyk.put("python", "/usr/bin/python");
47 interpreti = Collections.unmodifiableMap(podporovanýJazyk);
51 * TODO: podporovat i složitější scénáře (např. kompilaci),
52 * než jen vložení do souboru a přidání správného záhlaví.
54 * @param skript program k vykonání
55 * @param jazyk programovací jazyk
56 * @param uriStránky URI aktuálně generované stránky → proměnná prostředí
57 * @param nadpisStránky nadpis stránky → proměnná prostředí
58 * @param perexStránky perex stránky → proměnná prostředí
59 * @return výstup příkazu
61 public static String interpretuj(String skript, String jazyk, String uriStránky, String nadpisStránky, String perexStránky) {
63 System.err.println("\tInterpretuji skript v jazyce: " + jazyk);
64 String interpret = interpreti.get(jazyk);
65 if (interpret == null) {
66 System.err.println("Neznámý skriptovací jazyk: " + jazyk);
69 File f = File.createTempFile("xml-web-generátor-", ".skript");
72 PrintStream ps = new PrintStream(f);
74 ps.println(interpret);
79 f.setExecutable(true);
81 String[] prostředí = new String[]{
82 "LANG=" + System.getenv("LANG"),
83 "USER=" + System.getenv("USER"),
84 "XWG_STRANKA_URI=" + uriStránky,
85 "XWG_STRANKA_SOUBOR=" + (new File(new URI(uriStránky)).getAbsolutePath()),
86 "XWG_STRANKA_NADPIS=" + nadpisStránky,
87 "XWG_STRANKA_PEREX=" + perexStránky
92 Runtime r = Runtime.getRuntime();
93 Process p = r.exec(new String[]{f.getAbsolutePath()}, prostředí);
95 String výsledek = načtiProud(p.getInputStream());
96 String chyby = načtiProud(p.getErrorStream());
101 * TODO: podporovat zvláštní návratový kód, kterým skript řekne,
102 * že výstupem je XML a má se vložit jako fragment do dokumentu,
103 * ne jako prostý text.
105 if (p.exitValue() == 0) {
106 if (chyby.length() > 0) {
107 System.err.println("--- Cyhbový výstup skriptu -----");
108 System.err.println(chyby);
109 System.err.println("--------------------------------");
112 return výsledek.trim();
114 System.err.println("--- Standardní výstup skriptu: -----");
115 System.err.println(výsledek);
116 System.err.println("--- Cyhbový výstup skriptu: ---------");
117 System.err.println(chyby);
118 System.err.println("--------------------------------------");
119 throw new RuntimeException("Návratová hodnota: " + p.exitValue());
122 } catch (Exception e) {
123 System.err.println("Došlo k chybě při vykonávání skriptu v jazyce: " + jazyk);
124 System.err.println("--------");
125 System.err.println(skript);
126 System.err.println("--------");
127 e.printStackTrace(System.err);