Changeset 107:379a2a893fd1 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
r103 r107 19 19 20 20 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.načtiProud; 21 import static cz.frantovo.xmlWebGenerator.Xmlns.*; 21 22 import java.io.ByteArrayInputStream; 22 23 import java.io.File; … … 28 29 import javax.xml.parsers.DocumentBuilder; 29 30 import javax.xml.parsers.DocumentBuilderFactory; 31 import javax.xml.transform.Source; 32 import javax.xml.transform.dom.DOMSource; 30 33 import org.w3c.dom.Document; 34 import org.w3c.dom.Node; 31 35 32 36 /** … … 63 67 * @param nadpisStránky nadpis stránky → proměnná prostředí 64 68 * @param perexStránky perex stránky → proměnná prostředí 65 * @return výstup příkazu 69 * @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource) 66 70 */ 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) { 71 public static Source interpretuj(String skriptText, String skriptSoubor, String jazyk, String výstupníFormát, String uriStránky, String nadpisStránky, String perexStránky) throws Exception { 72 String výstupSkriptu = získejVýstupSkriptu(skriptText, skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky); 73 return vyrobXml(výstupSkriptu, "xml".equals(výstupníFormát)); 74 } 75 76 private static String získejVýstupSkriptu(String skriptText, String skriptSoubor, String jazyk, String uriStránky, String nadpisStránky, String perexStránky) throws Exception { 77 68 78 try { 69 79 if (isNeprázdný(skriptSoubor)) { … … 137 147 } 138 148 139 return připravVýstup(výsledek, výstupníFormát);149 return výsledek.trim(); 140 150 } else { 141 151 System.err.println("--- Standardní výstup skriptu: -----"); … … 147 157 } 148 158 } catch (Exception e) { 149 System.err.println("Došlo k chybě při vykonávání skriptu v jazyce: " + jazyk);159 System.err.println("Došlo k chybě při vykonávání skriptu."); 150 160 System.err.println("--------"); 151 161 System.err.println(skriptText); 152 162 System.err.println("--------"); 153 163 e.printStackTrace(System.err); 154 return null; 155 } 156 } 157 158 private static String připravVýstup(String výsledek, String formát) { 159 if ("xml".equals(formát)) { 160 if (zkontrolujXml(výsledek)) { 161 return výsledek.trim(); 162 } else { 163 System.err.println("Chyba v XML generovaném skriptem:"); 164 System.err.println(výsledek); 165 return null; 166 } 167 } else { 168 return výsledek.trim(); 164 throw e; 169 165 } 170 166 } … … 175 171 176 172 /** 177 * @param xml fragment XML vygenerovaný skriptem 178 * @return true v případě, že výstup je validním fragmentem XML 173 * @param zadání výstup vygenerovaný skriptem 174 * @param xmlFormát formát zadání: true = xml fragment | false = prostý text 175 * @return xml fragment nebo prostý text zabalený do html/body 176 * @throws Exception 179 177 */ 180 private static boolean zkontrolujXml(String xml) { 181 try { 182 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 183 DocumentBuilder db = dbf.newDocumentBuilder(); 184 xml = "<xml>" + xml + "</xml>"; 185 Document d = db.parse(new ByteArrayInputStream(xml.getBytes())); 186 return true; 187 } catch (Exception e) { 188 e.printStackTrace(System.err); 189 return false; 178 private static Source vyrobXml(String zadání, boolean xmlFormát) throws Exception { 179 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 180 DocumentBuilder db = dbf.newDocumentBuilder(); 181 Document d; 182 183 if (xmlFormát) { 184 try { 185 zadání = "<html xmlns='" + XHTML + "' xmlns:m='" + MAKRO + "'><body>" + zadání + "</body></html>"; 186 d = db.parse(new ByteArrayInputStream(zadání.getBytes())); 187 } catch (Exception e) { 188 System.err.println("Chyba: Skript vrátil neplatné XML."); 189 throw e; 190 } 191 } else { 192 d = db.newDocument(); 193 Node html = d.createElementNS(XHTML, "html"); 194 Node body = d.createElementNS(XHTML, "body"); 195 Node text = d.createTextNode(zadání); 196 body.appendChild(text); 197 html.appendChild(body); 198 d.appendChild(html); 190 199 } 200 201 return new DOMSource(d); 191 202 } 192 203 }