Show
Ignore:
Files:
4 added
12 removed
13 modified

Legend:

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

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

    r30 r19  
    4646                    } 
    4747 
    48                     long casPred = System.currentTimeMillis(); 
    4948                    ps = db.prepareStatement(sql); 
    5049                    boolean isRS = ps.execute(); 
     
    6059                        v.getTabulky().add(zpracujVysledek(rs)); 
    6160                    } 
    62                     long dobaProvadeni = System.currentTimeMillis() - casPred; 
    6361 
    6462                    /** Varování */ 
     
    7674                    } 
    7775 
    78                     v.getHlasky().add(new Hlaska("SQL příkaz byl proveden úspěšně, během " + dobaProvadeni + " ms.", Typ.OK)); 
    7976 
    8077                } catch (SQLException e) { 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java

    r29 r16  
    11package cz.frantovo.sql.vyuka.dao; 
    22 
    3 import java.sql.Connection; 
    4 import java.sql.PreparedStatement; 
    5 import java.sql.ResultSet; 
    6 import java.util.logging.Level; 
    7  
    83/** 
    9  * Rady, tipy, odkazy, citáty… pro zobrazování uživatelům. 
     4 * 
    105 * @author fiki 
    116 */ 
    127public class TipyDAO extends VyukaSuperDAO { 
    138 
    14     private enum SQL { 
    15  
    16         NAHODNY_TIP 
    17     } 
    18  
    19     /** 
    20      * @return Náhodný tip načtený z databáze 
    21      */ 
    229    public String getTip() { 
    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         } 
     10        /** TODO: Tipy brát z databáze. */ 
     11        return "Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>."; 
    4212    } 
    4313} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java

    r25 r12  
    11package cz.frantovo.sql.vyuka.dto; 
     2 
     3import cz.frantovo.sql.vyuka.Html; 
    24 
    35/** 
     
    57 * @author fiki 
    68 */ 
    7 public class Hlaska { 
     9public class Hlaska implements HtmlObjekt { 
    810 
    9     public enum Typ { 
    10  
    11         OK, 
    12         Tip, 
    13         Varovani, 
    14         Chyba 
    15     } 
    1611    private String text; 
    1712    private Typ typ; 
    18     private boolean escapovat = true; 
     13    private boolean escapovat; 
    1914 
    2015    /** 
     
    3934        this.typ = typ; 
    4035        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>"; 
    4146    } 
    4247 
     
    6469        this.escapovat = escapovat; 
    6570    } 
     71 
     72    public enum Typ { 
     73 
     74        OK, 
     75        Tip, 
     76        Varovani, 
     77        Chyba 
     78    } 
    6679} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java

    r26 r16  
    11package cz.frantovo.sql.vyuka.dto; 
    22 
     3import cz.frantovo.sql.vyuka.Html; 
    34import java.util.ArrayList; 
    45import java.util.Collection; 
     
    89 * @author fiki 
    910 */ 
    10 public class Tabulka { 
     11public class Tabulka implements HtmlObjekt { 
    1112 
    1213    private String[] zahlavi; 
    13     private String zahlaviTip; 
    1414    private Collection<Object[]> hodnoty = new ArrayList<Object[]>(); 
    15     /** Zda se má lokalizovat záhlaví tabulky a její tip. */ 
    16     private boolean lokalizovat = false; 
     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    } 
    1761 
    1862    public String[] getZahlavi() { 
     
    2468    } 
    2569 
    26     public String getZahlaviTip() { 
    27         return zahlaviTip; 
    28     } 
    29  
    30     public void setZahlaviTip(String zahlaviTip) { 
    31         this.zahlaviTip = zahlaviTip; 
    32     } 
    33  
    3470    public Collection<Object[]> getHodnoty() { 
    3571        return hodnoty; 
    3672    } 
    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     } 
    5373} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Uzivatel.java

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

    r25 r12  
    55 
    66/** 
    7  * Výsledek SQL dotazu. 
    8  * Obsahuje tabulky a hlášky. 
     7 * Výsledek SQL dotazu 
    98 * @author fiki 
    109 */ 
    11 public class VysledekSQL { 
     10public class VysledekSQL implements HtmlObjekt { 
    1211 
    1312    private Collection<Tabulka> tabulky = new ArrayList<Tabulka>(); 
     
    2120        return hlasky; 
    2221    } 
     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    } 
    2336} 
  • java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/preklady_cs.properties

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

    r23 r20  
    66    <fmt:setBundle basename="cz.frantovo.sql.vyuka.preklady" scope="application"/> 
    77 
    8     <!-- Logo programu --> 
    98    <div id="zahlavi"><h1><fmt:message key="nazev"/></h1></div> 
    109 
    1110    <div id="bloky"> 
    12         <!-- Nápověda --> 
    1311        <div class ="blok" id="napoveda"> 
    1412            <h2><fmt:message key="blok.napoveda"/></h2> 
    15             <div class="vnitrekBloku" id="napovedniPole"> 
    16                 <jsp:include page="napoveda.jspx" flush="false"/> 
     13            <div class="vnitrekBloku"> 
     14                <p id="napovedniPole"><fmt:message key="vychozi.napoveda"/></p> 
    1715            </div> 
    1816        </div> 
     17 
     18 
    1919        <div id="io"> 
    20             <!-- Zadávání SQL příkazů --> 
     20 
    2121            <div class ="blok" id="vstup"> 
    2222                <h2><fmt:message key="blok.zadavani"/></h2> 
     
    2828                                      rows="100" 
    2929                                      cols="1000" 
    30                                       onkeypress="javascript:zpracujTabulatory(event);"><fmt:message key="vychozi.sql"/></textarea> 
     30                                      onkeypress="javascript:checkTab(event);"><fmt:message key="vychozi.sql"/></textarea> 
    3131                            <input  id="stavovePole" 
    3232                                    name="stavovePole" 
     
    4848                </div> 
    4949            </div> 
    50             <!-- Zobrazování výstupu --> 
     50 
     51 
     52 
     53 
     54 
    5155            <div class ="blok" id="vystup"> 
    5256                <h2><fmt:message key="blok.vysledek"/></h2> 
    5357                <div class="vnitrekBloku" id="vystupniPole"> 
    54                     <jsp:include page="vitejte.jspx" flush="false"/> 
     58                    <p> 
     59                        <fmt:message key="vychozi.vysledek"/> 
     60                    </p> 
    5561                </div> 
    5662            </div> 
    5763        </div> 
     64 
    5865    </div> 
    59  
    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

    r24 r20  
    1616        return new ActiveXObject("Microsoft.XMLHTTP"); 
    1717    } else { 
    18         alert(document.lokalizace.nepodporovany.value); 
     18        alert("Váš prohlížeč nepodporuje AJAX. Pořiďte si méně zastaralý prohlížeč, nejlépe Firefox."); 
    1919        return null; 
    2020    } 
    2121} 
    2222 
    23  
    2423/** Náš AJAXový objekt. */ 
    2524var ajax = getXmlHttpRequestObject(); 
    26  
    2725 
    2826/** 
     
    3432} 
    3533 
    36  
    3734/** 
    3835 * Zobrazí text na požadovaném místě. 
    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. 
     36 * @param text text k zobrazení 
     37 * @param kde id prvku, do kterého se má text vypsat 
    4138 **/ 
    4239function zobraz(text, kde) { 
     
    5047} 
    5148 
     49/** 
     50 * Zobrazí text ve výstupním poli. 
     51 * @param text HTML text k zobrazení 
     52 **/ 
     53function 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 **/ 
     62function 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 **/ 
     71function 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 **/ 
     79function zobrazNapovedu(text) { 
     80    zobraz(text, napovedniPole); 
     81} 
    5282 
    5383/** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */ 
    5484function ajaxVykonatSQL() { 
    5585    if (ajax.readyState == 4 || ajax.readyState == 0) { 
    56         zobraz(document.lokalizace.probihaSQL.value, stavovePole); 
    57         ajax.open("POST", 'ajax.jspx?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true); 
     86        zobrazStav('Probíhá zpracování SQL příkazu…'); 
     87        ajax.open("POST", 'ajax?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true); 
    5888        ajax.onreadystatechange = function() { 
    5989            if (ajax.readyState == 4) { 
    60                 zobraz(ajax.responseText, vystupniPole); 
    61                 zobraz('', stavovePole); 
     90                zobrazVystup(ajax.responseText); 
     91                zobrazStav(''); 
    6292            } 
    6393        }; 
     
    70100function ajaxZobrazitHistorii() { 
    71101    if (ajax.readyState == 4 || ajax.readyState == 0) { 
    72         zobraz(document.lokalizace.probihaHistorie.value, stavovePole); 
    73         ajax.open("POST", 'ajax.jspx?akce=historie', true); 
     102        ajax.open("POST", 'ajax?akce=historie', true); 
    74103        ajax.onreadystatechange = function() { 
    75104            if (ajax.readyState == 4) { 
    76                 zobraz(ajax.responseText, vystupniPole); 
    77                 zobraz('', stavovePole); 
     105                zobrazVystup(ajax.responseText); 
    78106            } 
    79107        }; 
  • java/sql-vyuka/web/index.jsp

    r23 r14  
    1 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    21<%@page contentType="text/html" pageEncoding="UTF-8"%> 
    32<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    43<%@ 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

    r22 r20  
    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

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