Changes in [30:d65581701671:20:47de9e8ce93e]
- 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 59 59 60 60 Tabulka t = new Tabulka(); 61 String[] zahlavi = {" historie.kdy", "historie.prikaz"};61 String[] zahlavi = {"Kdy", "SQL příkaz"}; 62 62 t.setZahlavi(zahlavi); 63 t.setZahlaviTip("historie.zahlaviTip"); 64 t.setLokalizovat(true); 63 65 64 66 65 Connection db = getSpojeni(DATABAZE.APLIKACE); -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java
r30 r19 46 46 } 47 47 48 long casPred = System.currentTimeMillis();49 48 ps = db.prepareStatement(sql); 50 49 boolean isRS = ps.execute(); … … 60 59 v.getTabulky().add(zpracujVysledek(rs)); 61 60 } 62 long dobaProvadeni = System.currentTimeMillis() - casPred;63 61 64 62 /** Varování */ … … 76 74 } 77 75 78 v.getHlasky().add(new Hlaska("SQL příkaz byl proveden úspěšně, během " + dobaProvadeni + " ms.", Typ.OK));79 76 80 77 } catch (SQLException e) { -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java
r29 r16 1 1 package cz.frantovo.sql.vyuka.dao; 2 2 3 import java.sql.Connection;4 import java.sql.PreparedStatement;5 import java.sql.ResultSet;6 import java.util.logging.Level;7 8 3 /** 9 * Rady, tipy, odkazy, citáty… pro zobrazování uživatelům.4 * 10 5 * @author fiki 11 6 */ 12 7 public class TipyDAO extends VyukaSuperDAO { 13 8 14 private enum SQL {15 16 NAHODNY_TIP17 }18 19 /**20 * @return Náhodný tip načtený z databáze21 */22 9 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>."; 42 12 } 43 13 } -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Hlaska.java
r25 r12 1 1 package cz.frantovo.sql.vyuka.dto; 2 3 import cz.frantovo.sql.vyuka.Html; 2 4 3 5 /** … … 5 7 * @author fiki 6 8 */ 7 public class Hlaska {9 public class Hlaska implements HtmlObjekt { 8 10 9 public enum Typ {10 11 OK,12 Tip,13 Varovani,14 Chyba15 }16 11 private String text; 17 12 private Typ typ; 18 private boolean escapovat = true;13 private boolean escapovat; 19 14 20 15 /** … … 39 34 this.typ = typ; 40 35 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>"; 41 46 } 42 47 … … 64 69 this.escapovat = escapovat; 65 70 } 71 72 public enum Typ { 73 74 OK, 75 Tip, 76 Varovani, 77 Chyba 78 } 66 79 } -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java
r26 r16 1 1 package cz.frantovo.sql.vyuka.dto; 2 2 3 import cz.frantovo.sql.vyuka.Html; 3 4 import java.util.ArrayList; 4 5 import java.util.Collection; … … 8 9 * @author fiki 9 10 */ 10 public class Tabulka {11 public class Tabulka implements HtmlObjekt { 11 12 12 13 private String[] zahlavi; 13 private String zahlaviTip;14 14 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 } 17 61 18 62 public String[] getZahlavi() { … … 24 68 } 25 69 26 public String getZahlaviTip() {27 return zahlaviTip;28 }29 30 public void setZahlaviTip(String zahlaviTip) {31 this.zahlaviTip = zahlaviTip;32 }33 34 70 public Collection<Object[]> getHodnoty() { 35 71 return hodnoty; 36 72 } 37 38 /**39 * Zda se má lokalizovat záhlaví tabulky a její tip.40 * @return the lokalizovat41 */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 set49 */50 public void setLokalizovat(boolean lokalizovat) {51 this.lokalizovat = lokalizovat;52 }53 73 } -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Uzivatel.java
r24 r13 13 13 this.idSezeni = idSezeni; 14 14 this.ipAdresa = ipAdresa; 15 }16 17 public Uzivatel() {18 15 } 19 16 -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/VysledekSQL.java
r25 r12 5 5 6 6 /** 7 * Výsledek SQL dotazu. 8 * Obsahuje tabulky a hlášky. 7 * Výsledek SQL dotazu 9 8 * @author fiki 10 9 */ 11 public class VysledekSQL {10 public class VysledekSQL implements HtmlObjekt { 12 11 13 12 private Collection<Tabulka> tabulky = new ArrayList<Tabulka>(); … … 21 20 return hlasky; 22 21 } 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 } 23 36 } -
java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/preklady_cs.properties
r24 r18 14 14 vychozi.vysledek=V\u00EDtejte v programu SQL v\u00FDuka! 15 15 vychozi.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\u202619 js.probihaHistorie=Na\u010D\u00EDt\u00E1 se historie\u202620 21 licence.program=Program je vyd\u00E1n pod licenc\u00ED:22 licence.agpl=GNU Affero GPL23 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=Kdy27 historie.prikaz=SQL p\u0159\u00EDkaz28 historie.zahlaviTip=Posledn\u00ED proveden\u00E9 SQL p\u0159\u00EDkazy. -
java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx
r23 r20 6 6 <fmt:setBundle basename="cz.frantovo.sql.vyuka.preklady" scope="application"/> 7 7 8 <!-- Logo programu -->9 8 <div id="zahlavi"><h1><fmt:message key="nazev"/></h1></div> 10 9 11 10 <div id="bloky"> 12 <!-- Nápověda -->13 11 <div class ="blok" id="napoveda"> 14 12 <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> 17 15 </div> 18 16 </div> 17 18 19 19 <div id="io"> 20 <!-- Zadávání SQL příkazů --> 20 21 21 <div class ="blok" id="vstup"> 22 22 <h2><fmt:message key="blok.zadavani"/></h2> … … 28 28 rows="100" 29 29 cols="1000" 30 onkeypress="javascript: zpracujTabulatory(event);"><fmt:message key="vychozi.sql"/></textarea>30 onkeypress="javascript:checkTab(event);"><fmt:message key="vychozi.sql"/></textarea> 31 31 <input id="stavovePole" 32 32 name="stavovePole" … … 48 48 </div> 49 49 </div> 50 <!-- Zobrazování výstupu --> 50 51 52 53 54 51 55 <div class ="blok" id="vystup"> 52 56 <h2><fmt:message key="blok.vysledek"/></h2> 53 57 <div class="vnitrekBloku" id="vystupniPole"> 54 <jsp:include page="vitejte.jspx" flush="false"/> 58 <p> 59 <fmt:message key="vychozi.vysledek"/> 60 </p> 55 61 </div> 56 62 </div> 57 63 </div> 64 58 65 </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>66 66 </jsp:root> -
java/sql-vyuka/web/hlavni.js
r24 r20 16 16 return new ActiveXObject("Microsoft.XMLHTTP"); 17 17 } 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."); 19 19 return null; 20 20 } 21 21 } 22 22 23 24 23 /** Náš AJAXový objekt. */ 25 24 var ajax = getXmlHttpRequestObject(); 26 27 25 28 26 /** … … 34 32 } 35 33 36 37 34 /** 38 35 * 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 41 38 **/ 42 39 function zobraz(text, kde) { … … 50 47 } 51 48 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 } 52 82 53 83 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */ 54 84 function ajaxVykonatSQL() { 55 85 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); 58 88 ajax.onreadystatechange = function() { 59 89 if (ajax.readyState == 4) { 60 zobraz (ajax.responseText, vystupniPole);61 zobraz ('', stavovePole);90 zobrazVystup(ajax.responseText); 91 zobrazStav(''); 62 92 } 63 93 }; … … 70 100 function ajaxZobrazitHistorii() { 71 101 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); 74 103 ajax.onreadystatechange = function() { 75 104 if (ajax.readyState == 4) { 76 zobraz(ajax.responseText, vystupniPole); 77 zobraz('', stavovePole); 105 zobrazVystup(ajax.responseText); 78 106 } 79 107 }; -
java/sql-vyuka/web/index.jsp
r23 r14 1 <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">2 1 <%@page contentType="text/html" pageEncoding="UTF-8"%> 3 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 3 <%@ 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"> 5 5 6 6 <fmt:setBundle basename="cz.frantovo.sql.vyuka.preklady" scope="application"/> -
java/sql-vyuka/web/styl.css
r22 r20 203 203 font-style: italic; 204 204 } 205 206 /** Skrytý formulář sloužící pro lokalizaci JavaScriptu */207 #lokalizace {208 display: none;209 } -
java/sql-vyuka/web/vstupniPole.js
r22 r15 3 3 var tab = "\t"; 4 4 5 function zpracujTabulatory(evt) {5 function checkTab(evt) { 6 6 7 7 var t = evt.target;