šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java
changeset 67 89b42acb3593
parent 61 9503eb8377f1
child 68 2e6d7bfcd84f
equal deleted inserted replaced
66:a8085dedd92b 67:89b42acb3593
    21 import java.io.IOException;
    21 import java.io.IOException;
    22 import java.io.PrintStream;
    22 import java.io.PrintStream;
    23 import java.util.Date;
    23 import java.util.Date;
    24 import java.net.URI;
    24 import java.net.URI;
    25 import java.net.URISyntaxException;
    25 import java.net.URISyntaxException;
       
    26 import java.net.URLDecoder;
       
    27 import java.nio.charset.Charset;
    26 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
    28 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
    27 
    29 
    28 /**
    30 /**
    29  * Knihovna funkcí volaných z XSLT.
    31  * Knihovna funkcí volaných z XSLT.
    30  *  
    32  *  
    39 	private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
    41 	private static final String PŘÍKAZ_PYGMENTIZE = "pygmentize";
    40 	private static final String PŘÍKAZ_DOT = "dot";
    42 	private static final String PŘÍKAZ_DOT = "dot";
    41 	private static final String PŘÍKAZ_MARKDOWN = "markdown";
    43 	private static final String PŘÍKAZ_MARKDOWN = "markdown";
    42 	private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
    44 	private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
    43 	private static int počítadloDiagramů = 0;
    45 	private static int počítadloDiagramů = 0;
       
    46 	private static String počítadloDiagramůKontext = "";
    44 
    47 
    45 	/**
    48 	/**
    46 	 * Zjištuje, kdy byl naposledy daný soubor změněn.
    49 	 * Zjištuje, kdy byl naposledy daný soubor změněn.
    47 	 * @param soubor cesta k souboru
    50 	 * @param soubor cesta k souboru
    48 	 * @return datum poslední změny
    51 	 * @return datum poslední změny
   113 	/**
   116 	/**
   114 	 * Vytvoří obrázek s diagramem.
   117 	 * Vytvoří obrázek s diagramem.
   115 	 * @param zadání definice diagramu ve formátu dot
   118 	 * @param zadání definice diagramu ve formátu dot
   116 	 * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
   119 	 * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
   117 	 * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
   120 	 * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
       
   121 	 * @param kontext kam diagram patří – typicky název stránky, do které je vložen
       
   122 	 * diagramy se pak budou číslovat v rámci tohoto kontextu 
       
   123 	 * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu.
       
   124 	 * @param souborZadání null pokud chceme automatické číslování | nebo zadáme název souboru se zadáním diagramu – vygenerovaný diagram se pak bude jmenovat stejně
   118 	 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
   125 	 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
   119 	 */
   126 	 */
   120 	public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException {
   127 	public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException {
   121 		if (isPříkazDostupný(PŘÍKAZ_DOT)) {
   128 		if (isPříkazDostupný(PŘÍKAZ_DOT)) {
   122 			počítadloDiagramů++;
   129 			System.err.println("XXX Kontext: " + URLDecoder.decode(kontext, Charset.defaultCharset().name()));
   123 			String soubor = "diagram-" + počítadloDiagramů;
   130 			System.err.println("XXX Soubor:  " + souborZadání);
       
   131 
       
   132 			String soubor;
       
   133 			if (souborZadání == null) {
       
   134 				if (kontext == null) {
       
   135 					počítadloDiagramů++;
       
   136 					soubor = "diagram-" + počítadloDiagramů;
       
   137 				} else {
       
   138 					// TODO: tohle by se mělo udělat v XSLT
       
   139 					kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name());
       
   140 					
       
   141 					// Každá stránka bude mít svoje diagramy číslované od 1
       
   142 					if (!počítadloDiagramůKontext.equals(kontext)) {
       
   143 						počítadloDiagramůKontext = kontext;
       
   144 						počítadloDiagramů = 0;
       
   145 					}
       
   146 					
       
   147 					počítadloDiagramů++;
       
   148 					soubor = "diagram-" + kontext + "-" + počítadloDiagramů;
       
   149 				}
       
   150 			} else {
       
   151 				soubor = souborZadání;
       
   152 			}
   124 			String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
   153 			String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
   125 
   154 
   126 			String zdroják;
   155 			String zdroják;
   127 			if (kompletní) {
   156 			if (kompletní) {
   128 				zdroják = zadání;
   157 				zdroják = zadání;