Changeset 103:aa91d1c6d4c1 for šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java
Legend:
- Unmodified
- Added
- Removed
-
šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java
r101 r103 56 56 * než jen vložení do souboru a přidání správného záhlaví. 57 57 * 58 * @param skript program k vykonání 58 * @param skriptText skript k vykonání 59 * @param skriptSoubor cesta k souboru se skriptem/programem 59 60 * @param jazyk programovací jazyk 60 61 * @param výstupníFormát text (výchozí) | xml (v tom případě kontrolujeme validitu) … … 64 65 * @return výstup příkazu 65 66 */ 66 public static String interpretuj(String skript , String jazyk, String výstupníFormát, String uriStránky, String nadpisStránky, String perexStránky) {67 public static String interpretuj(String skriptText, String skriptSoubor, String jazyk, String výstupníFormát, String uriStránky, String nadpisStránky, String perexStránky) { 67 68 try { 68 System.err.println("\tInterpretuji skript v jazyce: " + jazyk); 69 String interpret = interpreti.get(jazyk); 70 if (interpret == null) { 71 System.err.println("Neznámý skriptovací jazyk: " + jazyk); 72 return null; 69 if (isNeprázdný(skriptSoubor)) { 70 System.err.println("\tInterpretuji skript ze souboru: " + skriptSoubor); 73 71 } else { 74 File f = File.createTempFile("xml-web-generátor-", ".skript"); 72 System.err.println("\tInterpretuji skript v jazyce: " + jazyk); 73 } 74 75 File souborStránky = new File(new URI(uriStránky)); 76 File f; 77 78 if (isNeprázdný(skriptText)) { 79 /** Skript je zadán uvnitř elementu přímo ve stránce */ 80 String interpret = interpreti.get(jazyk); 81 if (interpret == null) { 82 throw new Exception("Neznámý skriptovací jazyk: " + jazyk); 83 } 84 85 f = File.createTempFile("xml-web-generátor-", ".skript"); 75 86 f.deleteOnExit(); 87 f.setExecutable(true); 76 88 77 89 PrintStream ps = new PrintStream(f); … … 79 91 ps.println(interpret); 80 92 ps.println(); 81 ps.print(skript );93 ps.print(skriptText); 82 94 ps.close(); 95 } else if (isNeprázdný(skriptSoubor)) { 96 /** Skript/program je uložen v externím souboru */ 97 if (skriptSoubor.startsWith(File.separator)) { 98 /** absolutní cesta */ 99 f = new File(skriptSoubor); 100 } else { 101 /** relativní cesta */ 102 f = new File(souborStránky.getParent(), File.separatorChar + skriptSoubor); 103 } 104 105 if (!f.canExecute()) { 106 throw new Exception("Soubor se skriptem není spustitelný → nastavte: chmod +x " + f); 107 } 108 } else { 109 throw new Exception("Musí být vyplněn text skriptu, nebo cesta k souboru."); 110 } 83 111 84 112 85 String[] prostředí = new String[]{86 "LANG=" + System.getenv("LANG"),87 "USER=" + System.getenv("USER"),88 "XWG_SKRIPTOVANI_JAVA=" + "šablona" + File.separator + "funkce" + File.separator + "src" + File.separator + Skriptování.class.getName().replaceAll("\\.", File.separator) + ".java",89 "XWG_STRANKA_URI=" + uriStránky, // env:URI aktuálně zpracovávané stránky90 "XWG_STRANKA_SOUBOR=" + (new File(new URI(uriStránky)).getAbsolutePath()), // env:absolutní cesta k souboru91 "XWG_STRANKA_NADPIS=" + nadpisStránky, // env:nadpis stránky92 "XWG_STRANKA_PEREX=" + perexStránky // env:perex stránky93 };113 String[] prostředí = new String[]{ 114 "LANG=" + System.getenv("LANG"), 115 "USER=" + System.getenv("USER"), 116 "XWG_SKRIPTOVANI_JAVA=" + "šablona" + File.separator + "funkce" + File.separator + "src" + File.separator + Skriptování.class.getName().replaceAll("\\.", File.separator) + ".java", 117 "XWG_STRANKA_URI=" + uriStránky, // env:URI aktuálně zpracovávané stránky 118 "XWG_STRANKA_SOUBOR=" + souborStránky.getAbsolutePath(), // env:absolutní cesta k souboru 119 "XWG_STRANKA_NADPIS=" + nadpisStránky, // env:nadpis stránky 120 "XWG_STRANKA_PEREX=" + perexStránky // env:perex stránky 121 }; 94 122 95 f.setExecutable(true); 96 Runtime r = Runtime.getRuntime(); 97 Process p = r.exec(new String[]{f.getAbsolutePath()}, prostředí); 123 Runtime r = Runtime.getRuntime(); 124 Process p = r.exec(new String[]{f.getAbsolutePath()}, prostředí); 98 125 99 String výsledek = načtiProud(p.getInputStream());100 String chyby = načtiProud(p.getErrorStream());126 String výsledek = načtiProud(p.getInputStream()); 127 String chyby = načtiProud(p.getErrorStream()); 101 128 102 p.waitFor();129 p.waitFor(); 103 130 104 if (p.exitValue() == 0) {105 if (chyby.length() > 0) {106 System.err.println("--- Chybový výstup skriptu -----");107 System.err.println(chyby);108 System.err.println("--------------------------------");109 System.err.println("Nicméně skript skončil úspěšně, takže pokračujeme dál.");110 }131 if (p.exitValue() == 0) { 132 if (chyby.length() > 0) { 133 System.err.println("--- Chybový výstup skriptu -----"); 134 System.err.println(chyby); 135 System.err.println("--------------------------------"); 136 System.err.println("Nicméně skript skončil úspěšně, takže pokračujeme dál."); 137 } 111 138 112 return připravVýstup(výsledek, výstupníFormát); 113 } else { 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()); 120 } 139 return připravVýstup(výsledek, výstupníFormát); 140 } else { 141 System.err.println("--- Standardní výstup skriptu: -----"); 142 System.err.println(výsledek); 143 System.err.println("--- Cyhbový výstup skriptu: ---------"); 144 System.err.println(chyby); 145 System.err.println("--------------------------------------"); 146 throw new Exception("Návratová hodnota: " + p.exitValue()); 121 147 } 122 148 } catch (Exception e) { 123 149 System.err.println("Došlo k chybě při vykonávání skriptu v jazyce: " + jazyk); 124 150 System.err.println("--------"); 125 System.err.println(skript );151 System.err.println(skriptText); 126 152 System.err.println("--------"); 127 153 e.printStackTrace(System.err); … … 144 170 } 145 171 172 private static boolean isNeprázdný(String s) { 173 return !(s == null || s.trim().isEmpty()); 174 } 175 146 176 /** 147 177 * @param xml fragment XML vygenerovaný skriptem
