java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java
Generování souhrnu: překlad IP adres probíhá až ve druhém kroku.
Výchozí období pro generování: poslední měsíc.
1 package cz.frantovo.hrisniciSpameri.dao;
3 import cz.frantovo.hrisniciSpameri.dto.Cil;
4 import java.net.InetAddress;
5 import java.sql.Connection;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.util.Collection;
10 import java.util.logging.Level;
16 public class GeneratorSouhrnuDAO extends HrisniciSuperDAO {
27 * Vygeneruje souhrn pro daný cíl a datum a uloží ho do databáze
28 * @param cil cíl, pro který generujeme souhrn
29 * @param den den, pro který souhrn generujeme.
31 public void generujSouhrn(Cil cil, Date zacatek, Date konec) {
32 Connection dbZdroj = getSpojeni(cil.getDatabaze());
33 Connection dbSouhrn = getSpojeni(null);
39 if (dbZdroj == null || dbSouhrn == null) {
40 /** TODO: Chyba spojení */
42 PreparedStatement ps = null;
43 PreparedStatement psSmazat = null;
46 /** pokud už něco vygenerovaného pro daný den a cíl máme, smažeme to */
47 psSmazat = dbSouhrn.prepareStatement(getSQL(SQL.SMAZ_SOUHRNY));
48 psSmazat.setInt(1, cil.getId());
49 psSmazat.setDate(2, zacatek);
50 psSmazat.setDate(3, konec);
51 psSmazat.executeUpdate();
53 ps = dbZdroj.prepareStatement(cil.getSelekt());
54 ps.setDate(1, zacatek);
56 rs = ps.executeQuery();
57 PreparedStatement psSouhrn = dbSouhrn.prepareStatement(getSQL(SQL.VLOZ_SOUHRN));
60 * Souhrn bychom mohli vkládat pomocí SouhrnDAO,
61 * ale z výkonnostních důvodů to budeme dělat tady
62 * (jedno spojení a jeden předpřipravený příkaz).
64 psSouhrn.setDate(1, rs.getDate("den"));
65 psSouhrn.setString(2, rs.getString("ip"));
66 psSouhrn.setString(3, null);
67 psSouhrn.setInt(4, rs.getInt("pocet"));
68 psSouhrn.setInt(5, cil.getId());
69 psSouhrn.executeUpdate();
71 zavri(null, psSouhrn, null);
74 * Přeložíme všechny IP adresy daného období
75 * a aktualizujeme domény všude (i jiné cíle a jiná období).
77 PreparedStatement psIPselekt = dbSouhrn.prepareStatement(getSQL(SQL.IP_ADRESY_OBDOBI));
78 psIPselekt.setInt(1, cil.getId());
79 psIPselekt.setDate(2, zacatek);
80 psIPselekt.setDate(3, konec);
81 PreparedStatement psIPupdate = dbSouhrn.prepareStatement(getSQL(SQL.IP_PREKLAD));
82 ResultSet rsIP = psIPselekt.executeQuery();
84 String ip = rsIP.getString("ip");
85 String domena = prelozIP(ip);
86 psIPupdate.setString(1, domena);
87 psIPupdate.setString(2, ip);
88 psIPupdate.executeUpdate();
90 zavri(null, psIPselekt, null);
91 zavri(null, psIPupdate, null);
94 * Pokud se všechno povedlo, commitujeme, jinak nedochází k žádným změnám.
95 * Dané období se buď vygeneruje úspěšně, nebo vůbec.
96 * Přepokládáme vypnutý autocommit (to zajišťuje aplikační server).
99 } catch (Exception e) {
100 log.log(Level.SEVERE, "Chyba při generování souhrnu.", e);
102 zavri(dbZdroj, ps, rs);
103 zavri(dbSouhrn, psSmazat, null);
109 * Vygeneruje denní souhrny pro všechny cíle za dané období.
110 * @param zacatek začátek období – včetně
111 * @param konec konec období – včetně
113 public void generujSouhrny(Date zacatek, Date konec) {
114 Collection<Cil> cile = new CilDAO().getCile();
116 generujSouhrn(c, zacatek, konec);
121 * Přeloží IP adresu na doménu
122 * @param ip IP adresa
125 private static String prelozIP(String ip) {
127 return InetAddress.getByName(ip).getHostName();
128 } catch (Exception e) {
129 return "Chyba: nepodařilo se přeložit.";