Show
Ignore:
Files:
12 added
4 removed
13 modified

Legend:

Unmodified
Added
Removed
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.java

    r16 r26  
    5959 
    6060        Tabulka t = new Tabulka(); 
    61         String[] zahlavi = {"Kdy", "SQL příkaz"}; 
     61        String[] zahlavi = {"historie.kdy", "historie.prikaz"}; 
    6262        t.setZahlavi(zahlavi); 
    63  
     63        t.setZahlaviTip("historie.zahlaviTip"); 
     64        t.setLokalizovat(true); 
    6465 
    6566        Connection db = getSpojeni(DATABAZE.APLIKACE); 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java

    r19 r30  
    4646                    } 
    4747 
     48                    long casPred = System.currentTimeMillis(); 
    4849                    ps = db.prepareStatement(sql); 
    4950                    boolean isRS = ps.execute(); 
     
    5960                        v.getTabulky().add(zpracujVysledek(rs)); 
    6061                    } 
     62                    long dobaProvadeni = System.currentTimeMillis() - casPred; 
    6163 
    6264                    /** Varování */ 
     
    7476                    } 
    7577 
     78                    v.getHlasky().add(new Hlaska("SQL příkaz byl proveden úspěšně, během " + dobaProvadeni + " ms.", Typ.OK)); 
    7679 
    7780                } catch (SQLException e) { 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java

    r16 r29  
    11package cz.frantovo.sql.vyuka.dao; 
    22 
     3import java.sql.Connection; 
     4import java.sql.PreparedStatement; 
     5import java.sql.ResultSet; 
     6import java.util.logging.Level; 
     7 
    38/** 
    4  * 
     9 * Rady, tipy, odkazy, citáty… pro zobrazování uživatelům. 
    510 * @author fiki 
    611 */ 
    712public class TipyDAO extends VyukaSuperDAO { 
    813 
     14    private enum SQL { 
     15 
     16        NAHODNY_TIP 
     17    } 
     18 
     19    /** 
     20     * @return Náhodný tip načtený z databáze 
     21     */ 
    922    public String getTip() { 
    10         /** TODO: Tipy brát z databáze. */ 
    11         return "Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>."; 
     23        Connection db = getSpojeni(DATABAZE.APLIKACE); 
     24        if (db == null) { 
     25            log.log(Level.SEVERE, "Databáze je null."); 
     26            return null; 
     27        } else { 
     28            PreparedStatement ps = null; 
     29            ResultSet rs = null; 
     30            try { 
     31                ps = db.prepareStatement(getSQL(SQL.NAHODNY_TIP)); 
     32                rs = ps.executeQuery(); 
     33                rs.next(); 
     34                return rs.getString("text"); 
     35            } catch (Exception e) { 
     36                log.log(Level.SEVERE, "Chyba při hledání náhodného tipu.", e); 
     37                return null; 
     38            } finally { 
     39                zavri(db, ps, rs); 
     40            } 
     41        } 
    1242    } 
    1343} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java

    r12 r25  
    11package cz.frantovo.sql.vyuka.dto; 
    2  
    3 import cz.frantovo.sql.vyuka.Html; 
    42 
    53/** 
     
    75 * @author fiki 
    86 */ 
    9 public class Hlaska implements HtmlObjekt { 
     7public class Hlaska { 
    108 
     9    public enum Typ { 
     10 
     11        OK, 
     12        Tip, 
     13        Varovani, 
     14        Chyba 
     15    } 
    1116    private String text; 
    1217    private Typ typ; 
    13     private boolean escapovat; 
     18    private boolean escapovat = true; 
    1419 
    1520    /** 
     
    3439        this.typ = typ; 
    3540        this.escapovat = true; 
    36     } 
    37  
    38     public String getHtml() { 
    39         String hodnota; 
    40         if (isEscapovat()) { 
    41             hodnota = Html.escapuj(text); 
    42         } else { 
    43             hodnota = text; 
    44         } 
    45         return "<p class=\"vysledek" + getTyp().name() + "\">" + hodnota + "</p>"; 
    4641    } 
    4742 
     
    6964        this.escapovat = escapovat; 
    7065    } 
    71  
    72     public enum Typ { 
    73  
    74         OK, 
    75         Tip, 
    76         Varovani, 
    77         Chyba 
    78     } 
    7966} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java

    r16 r26  
    11package cz.frantovo.sql.vyuka.dto; 
    22 
    3 import cz.frantovo.sql.vyuka.Html; 
    43import java.util.ArrayList; 
    54import java.util.Collection; 
     
    98 * @author fiki 
    109 */ 
    11 public class Tabulka implements HtmlObjekt { 
     10public class Tabulka { 
    1211 
    1312    private String[] zahlavi; 
     13    private String zahlaviTip; 
    1414    private Collection<Object[]> hodnoty = new ArrayList<Object[]>(); 
    15  
    16     public String getHtml() { 
    17  
    18         if (getZahlavi() == null || getHodnoty() == null || getZahlavi().length < 1) { 
    19             return "<p>Chybná tabulka</p>"; 
    20         } else { 
    21  
    22             StringBuffer html = new StringBuffer(); 
    23  
    24             html.append("<table>"); 
    25  
    26  
    27             html.append("<thead title=\"Chceš setřídit výsledek podle nějakého sloupce? Co takhle ORDER BY sloupec.\">"); 
    28             html.append("<tr>"); 
    29             for (String z : getZahlavi()) { 
    30                 html.append("<td>" + Html.escapuj(z) + "</td>"); 
    31             } 
    32             html.append("</tr>"); 
    33             html.append("</thead>"); 
    34  
    35  
    36             html.append("<tbody>"); 
    37             for (Object[] hh : getHodnoty()) { 
    38                 html.append("<tr>"); 
    39                 for (Object h : hh) { 
    40                     html.append(formatujBunku(h)); 
    41                 } 
    42                 html.append("</tr>"); 
    43             } 
    44             html.append("</tbody>"); 
    45  
    46             html.append("</table>"); 
    47  
    48  
    49             return html.toString(); 
    50         } 
    51     } 
    52  
    53     private String formatujBunku(Object o) { 
    54         /** TODO: podporovat i jiné typy */ 
    55         if (o instanceof Integer) { 
    56             return "<td class=\"cislo\">" + Html.escapuj(String.valueOf(o)) + "</td>"; 
    57         } else { 
    58             return "<td>" + Html.escapuj(String.valueOf(o)) + "</td>"; 
    59         } 
    60     } 
     15    /** Zda se má lokalizovat záhlaví tabulky a její tip. */ 
     16    private boolean lokalizovat = false; 
    6117 
    6218    public String[] getZahlavi() { 
     
    6824    } 
    6925 
     26    public String getZahlaviTip() { 
     27        return zahlaviTip; 
     28    } 
     29 
     30    public void setZahlaviTip(String zahlaviTip) { 
     31        this.zahlaviTip = zahlaviTip; 
     32    } 
     33 
    7034    public Collection<Object[]> getHodnoty() { 
    7135        return hodnoty; 
    7236    } 
     37 
     38    /** 
     39     * Zda se má lokalizovat záhlaví tabulky a její tip. 
     40     * @return the lokalizovat 
     41     */ 
     42    public boolean isLokalizovat() { 
     43        return lokalizovat; 
     44    } 
     45 
     46    /** 
     47     * Zda se má lokalizovat záhlaví tabulky a její tip. 
     48     * @param lokalizovat the lokalizovat to set 
     49     */ 
     50    public void setLokalizovat(boolean lokalizovat) { 
     51        this.lokalizovat = lokalizovat; 
     52    } 
    7353} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Uzivatel.java

    r13 r24  
    1313        this.idSezeni = idSezeni; 
    1414        this.ipAdresa = ipAdresa; 
     15    } 
     16 
     17    public Uzivatel() { 
    1518    } 
    1619 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java

    r12 r25  
    55 
    66/** 
    7  * Výsledek SQL dotazu 
     7 * Výsledek SQL dotazu. 
     8 * Obsahuje tabulky a hlášky. 
    89 * @author fiki 
    910 */ 
    10 public class VysledekSQL implements HtmlObjekt { 
     11public class VysledekSQL { 
    1112 
    1213    private Collection<Tabulka> tabulky = new ArrayList<Tabulka>(); 
     
    2021        return hlasky; 
    2122    } 
    22  
    23     public String getHtml() { 
    24         StringBuffer html = new StringBuffer(); 
    25  
    26         for (Tabulka t : tabulky) { 
    27             html.append(t.getHtml()); 
    28         } 
    29  
    30         for (Hlaska h : hlasky) { 
    31             html.append(h.getHtml()); 
    32         } 
    33  
    34         return html.toString(); 
    35     } 
    3623} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/preklady_cs.properties

    r18 r24  
    1414vychozi.vysledek=V\u00EDtejte v programu SQL v\u00FDuka! 
    1515vychozi.napoveda=Tady bude n\u00E1pov\u011Bda 
     16 
     17js.nepodporovany=V\u00E1\u0161 prohl\u00ED\u017Ee\u010D nepodporuje AJAX. Po\u0159i\u010Fte si m\u00E9n\u011B zastaral\u00FD prohl\u00ED\u017Ee\u010D, nejl\u00E9pe Firefox. 
     18js.probihaSQL=Prob\u00EDh\u00E1 zpracov\u00E1n\u00ED SQL p\u0159\u00EDkazu\u2026 
     19js.probihaHistorie=Na\u010D\u00EDt\u00E1 se historie\u2026 
     20 
     21licence.program=Program je vyd\u00E1n pod licenc\u00ED: 
     22licence.agpl=GNU Affero GPL 
     23licence.zdrojaky=Zdrojov\u00E9 k\u00F3dy ke sta\u017Een\u00ED: 
     24 
     25vysledek.razeniTip=Chce\u0161 set\u0159\u00EDdit v\u00FDsledek podle n\u011Bjak\u00E9ho sloupce? Co takhle ORDER BY sloupec. 
     26historie.kdy=Kdy 
     27historie.prikaz=SQL p\u0159\u00EDkaz 
     28historie.zahlaviTip=Posledn\u00ED proveden\u00E9 SQL p\u0159\u00EDkazy. 
  • java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx

    r20 r23  
    66    <fmt:setBundle basename="cz.frantovo.sql.vyuka.preklady" scope="application"/> 
    77 
     8    <!-- Logo programu --> 
    89    <div id="zahlavi"><h1><fmt:message key="nazev"/></h1></div> 
    910 
    1011    <div id="bloky"> 
     12        <!-- Nápověda --> 
    1113        <div class ="blok" id="napoveda"> 
    1214            <h2><fmt:message key="blok.napoveda"/></h2> 
    13             <div class="vnitrekBloku"> 
    14                 <p id="napovedniPole"><fmt:message key="vychozi.napoveda"/></p> 
     15            <div class="vnitrekBloku" id="napovedniPole"> 
     16                <jsp:include page="napoveda.jspx" flush="false"/> 
    1517            </div> 
    1618        </div> 
    17  
    18  
    1919        <div id="io"> 
    20  
     20            <!-- Zadávání SQL příkazů --> 
    2121            <div class ="blok" id="vstup"> 
    2222                <h2><fmt:message key="blok.zadavani"/></h2> 
     
    2828                                      rows="100" 
    2929                                      cols="1000" 
    30                                       onkeypress="javascript:checkTab(event);"><fmt:message key="vychozi.sql"/></textarea> 
     30                                      onkeypress="javascript:zpracujTabulatory(event);"><fmt:message key="vychozi.sql"/></textarea> 
    3131                            <input  id="stavovePole" 
    3232                                    name="stavovePole" 
     
    4848                </div> 
    4949            </div> 
    50  
    51  
    52  
    53  
    54  
     50            <!-- Zobrazování výstupu --> 
    5551            <div class ="blok" id="vystup"> 
    5652                <h2><fmt:message key="blok.vysledek"/></h2> 
    5753                <div class="vnitrekBloku" id="vystupniPole"> 
    58                     <p> 
    59                         <fmt:message key="vychozi.vysledek"/> 
    60                     </p> 
     54                    <jsp:include page="vitejte.jspx" flush="false"/> 
    6155                </div> 
    6256            </div> 
    6357        </div> 
     58    </div> 
    6459 
    65     </div> 
     60    <!-- Načteme si lokalizované texty do skrytého formuláře, aby je mohl používat JavaScript --> 
     61    <form action="#" name="lokalizace" id="lokalizace"> 
     62        <textarea name="nepodporovany"><fmt:message key="js.nepodporovany"/></textarea> 
     63        <textarea name="probihaSQL"><fmt:message key="js.probihaSQL"/></textarea> 
     64        <textarea name="probihaHistorie"><fmt:message key="js.probihaHistorie"/></textarea> 
     65    </form> 
    6666</jsp:root> 
  • java/sql-vyuka/web/hlavni.js

    r20 r24  
    1616        return new ActiveXObject("Microsoft.XMLHTTP"); 
    1717    } else { 
    18         alert("Váš prohlížeč nepodporuje AJAX. Pořiďte si méně zastaralý prohlížeč, nejlépe Firefox."); 
     18        alert(document.lokalizace.nepodporovany.value); 
    1919        return null; 
    2020    } 
    2121} 
    2222 
     23 
    2324/** Náš AJAXový objekt. */ 
    2425var ajax = getXmlHttpRequestObject(); 
     26 
    2527 
    2628/** 
     
    3234} 
    3335 
     36 
    3437/** 
    3538 * Zobrazí text na požadovaném místě. 
    36  * @param text text k zobrazení 
    37  * @param kde id prvku, do kterého se má text vypsat 
     39 * @param text text k zobrazení. V případě formulářů prostý text, v ostatních případech HTML text. 
     40 * @param kde id prvku, do kterého se má text vypsat. 
    3841 **/ 
    3942function zobraz(text, kde) { 
     
    4750} 
    4851 
    49 /** 
    50  * Zobrazí text ve výstupním poli. 
    51  * @param text HTML text k zobrazení 
    52  **/ 
    53 function zobrazVystup(text) { 
    54     zobraz(text, vystupniPole); 
    55 } 
    56  
    57 /** 
    58  * Zobrazí text ve vstupním poli. 
    59  * Požijeme pro načtení SQL příkazu z historie. 
    60  * @param text prostý text k zobrazení 
    61  **/ 
    62 function zobrazVstup(text) { 
    63     zobraz(text, vstupniPole); 
    64 } 
    65  
    66 /** 
    67  * Zobrazí text ve vstupním poli. 
    68  * Požijeme pro načtení SQL příkazu z historie. 
    69  * @param text prostý text k zobrazení 
    70  **/ 
    71 function zobrazStav(text) { 
    72     zobraz(text, stavovePole); 
    73 } 
    74  
    75 /** 
    76  * Zobrazí text ve poli pro nápovědu. 
    77  * @param text text k zobrazení 
    78  **/ 
    79 function zobrazNapovedu(text) { 
    80     zobraz(text, napovedniPole); 
    81 } 
    8252 
    8353/** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */ 
    8454function ajaxVykonatSQL() { 
    8555    if (ajax.readyState == 4 || ajax.readyState == 0) { 
    86         zobrazStav('Probíhá zpracování SQL příkazu…'); 
    87         ajax.open("POST", 'ajax?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true); 
     56        zobraz(document.lokalizace.probihaSQL.value, stavovePole); 
     57        ajax.open("POST", 'ajax.jspx?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true); 
    8858        ajax.onreadystatechange = function() { 
    8959            if (ajax.readyState == 4) { 
    90                 zobrazVystup(ajax.responseText); 
    91                 zobrazStav(''); 
     60                zobraz(ajax.responseText, vystupniPole); 
     61                zobraz('', stavovePole); 
    9262            } 
    9363        }; 
     
    10070function ajaxZobrazitHistorii() { 
    10171    if (ajax.readyState == 4 || ajax.readyState == 0) { 
    102         ajax.open("POST", 'ajax?akce=historie', true); 
     72        zobraz(document.lokalizace.probihaHistorie.value, stavovePole); 
     73        ajax.open("POST", 'ajax.jspx?akce=historie', true); 
    10374        ajax.onreadystatechange = function() { 
    10475            if (ajax.readyState == 4) { 
    105                 zobrazVystup(ajax.responseText); 
     76                zobraz(ajax.responseText, vystupniPole); 
     77                zobraz('', stavovePole); 
    10678            } 
    10779        }; 
  • java/sql-vyuka/web/index.jsp

    r14 r23  
     1<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    12<%@page contentType="text/html" pageEncoding="UTF-8"%> 
    23<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    34<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
    4 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    55 
    66<fmt:setBundle basename="cz.frantovo.sql.vyuka.preklady" scope="application"/> 
  • java/sql-vyuka/web/styl.css

    r20 r22  
    203203    font-style: italic; 
    204204} 
     205 
     206/** Skrytý formulář sloužící pro lokalizaci JavaScriptu */ 
     207#lokalizace { 
     208    display: none; 
     209} 
  • java/sql-vyuka/web/vstupniPole.js

    r15 r22  
    33var tab = "\t"; 
    44 
    5 function checkTab(evt) { 
     5function zpracujTabulatory(evt) { 
    66 
    77    var t = evt.target;