šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java
changeset 108 8d9cab64c335
parent 107 379a2a893fd1
child 113 18bf0044f5ab
equal deleted inserted replaced
107:379a2a893fd1 108:8d9cab64c335
    38  *
    38  *
    39  * @author František Kučera (frantovo.cz)
    39  * @author František Kučera (frantovo.cz)
    40  */
    40  */
    41 public class Skriptování {
    41 public class Skriptování {
    42 
    42 
       
    43 	private enum FORMÁT {
       
    44 
       
    45 		xml,
       
    46 		xhtml,
       
    47 		text
       
    48 	}
    43 	/**
    49 	/**
    44 	 * klíč = jazyk – např. bash
    50 	 * klíč = jazyk – např. bash
    45 	 * hodnota = interpret – např. /bin/bash
    51 	 * hodnota = interpret – např. /bin/bash
    46 	 */
    52 	 */
    47 	private static final Map<String, String> interpreti;
    53 	private static final Map<String, String> interpreti;
    68 	 * @param perexStránky perex stránky → proměnná prostředí
    74 	 * @param perexStránky perex stránky → proměnná prostředí
    69 	 * @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource)
    75 	 * @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource)
    70 	 */
    76 	 */
    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 {
    77 	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);
    78 		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));
    79 		return vyrobXml(výstupSkriptu, zjistiFormát(výstupníFormát));
    74 	}
    80 	}
    75 
    81 
    76 	private static String získejVýstupSkriptu(String skriptText, String skriptSoubor, String jazyk, String uriStránky, String nadpisStránky, String perexStránky) throws Exception {
    82 	private static String získejVýstupSkriptu(String skriptText, String skriptSoubor, String jazyk, String uriStránky, String nadpisStránky, String perexStránky) throws Exception {
    77 
    83 
    78 		try {
    84 		try {
   167 
   173 
   168 	private static boolean isNeprázdný(String s) {
   174 	private static boolean isNeprázdný(String s) {
   169 		return !(s == null || s.trim().isEmpty());
   175 		return !(s == null || s.trim().isEmpty());
   170 	}
   176 	}
   171 
   177 
       
   178 	private static FORMÁT zjistiFormát(String výstupníFormát) {
       
   179 		try {
       
   180 			return FORMÁT.valueOf(výstupníFormát);
       
   181 		} catch (NullPointerException e) {
       
   182 			return FORMÁT.text;
       
   183 		} catch (IllegalArgumentException e) {
       
   184 			return FORMÁT.text;
       
   185 		}
       
   186 	}
       
   187 
   172 	/**
   188 	/**
   173 	 * @param zadání výstup vygenerovaný skriptem
   189 	 * @param zadání výstup vygenerovaný skriptem
   174 	 * @param xmlFormát formát zadání: true = xml fragment | false = prostý text
   190 	 * @param xmlFormát formát zadání: true = xml fragment | false = prostý text
   175 	 * @return xml fragment nebo prostý text zabalený do html/body
   191 	 * @return xml fragment nebo prostý text zabalený do html/body
   176 	 * @throws Exception
   192 	 * @throws Exception
   177 	 */
   193 	 */
   178 	private static Source vyrobXml(String zadání, boolean xmlFormát) throws Exception {
   194 	private static Source vyrobXml(String zadání, FORMÁT formát) throws Exception {
   179 		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   195 		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   180 		DocumentBuilder db = dbf.newDocumentBuilder();
   196 		DocumentBuilder db = dbf.newDocumentBuilder();
   181 		Document d;
   197 		Document d;
   182 
   198 
   183 		if (xmlFormát) {
   199 
   184 			try {
   200 		if (formát == FORMÁT.text) {
   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();
   201 			d = db.newDocument();
   193 			Node html = d.createElementNS(XHTML, "html");
   202 			Node html = d.createElementNS(XHTML, "html");
   194 			Node body = d.createElementNS(XHTML, "body");
   203 			Node body = d.createElementNS(XHTML, "body");
   195 			Node text = d.createTextNode(zadání);
   204 			Node text = d.createTextNode(zadání);
   196 			body.appendChild(text);
   205 			body.appendChild(text);
   197 			html.appendChild(body);
   206 			html.appendChild(body);
   198 			d.appendChild(html);
   207 			d.appendChild(html);
       
   208 		} else {
       
   209 			if (formát == FORMÁT.xhtml) {
       
   210 				zadání = "<html xmlns='" + XHTML + "' xmlns:m='" + MAKRO + "'><body>" + zadání + "</body></html>";
       
   211 			}
       
   212 			try {
       
   213 				d = db.parse(new ByteArrayInputStream(zadání.getBytes()));
       
   214 			} catch (Exception e) {
       
   215 				System.err.println("Chyba: Skript vrátil neplatné XML.");
       
   216 				throw e;
       
   217 			}
   199 		}
   218 		}
   200 
   219 
   201 		return new DOMSource(d);
   220 		return new DOMSource(d);
   202 	}
   221 	}
   203 }
   222 }