java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/GeneratorSouhrnuDAO.java
author František Kučera <franta-hg@frantovo.cz>
Sat Feb 14 19:31:33 2009 +0100 (2009-02-14)
changeset 23 b22c06c8a55c
parent 22 571d37e53ecd
child 28 dbb434bd4b99
permissions -rw-r--r--
Generátor generuje souhrny i překládá IP adresy na domény
franta-hg@22
     1
package cz.frantovo.hrisniciSpameri.dao;
franta-hg@22
     2
franta-hg@22
     3
import cz.frantovo.hrisniciSpameri.dto.Cil;
franta-hg@23
     4
import java.net.InetAddress;
franta-hg@22
     5
import java.sql.Connection;
franta-hg@22
     6
import java.sql.Date;
franta-hg@22
     7
import java.sql.PreparedStatement;
franta-hg@22
     8
import java.sql.ResultSet;
franta-hg@22
     9
import java.util.Collection;
franta-hg@22
    10
import java.util.logging.Level;
franta-hg@22
    11
franta-hg@22
    12
/**
franta-hg@22
    13
 *
franta-hg@22
    14
 * @author fiki
franta-hg@22
    15
 */
franta-hg@22
    16
public class GeneratorSouhrnuDAO extends HrisniciSuperDAO {
franta-hg@22
    17
franta-hg@22
    18
    private enum SQL {
franta-hg@22
    19
franta-hg@23
    20
        VLOZ_SOUHRN,
franta-hg@23
    21
        SMAZ_SOUHRNY
franta-hg@22
    22
    }
franta-hg@22
    23
franta-hg@22
    24
    /**
franta-hg@22
    25
     * Vygeneruje souhrn pro daný cíl a datum a uloží ho do databáze
franta-hg@22
    26
     * @param cil cíl, pro který generujeme souhrn
franta-hg@22
    27
     * @param den den, pro který souhrn generujeme.
franta-hg@22
    28
     */
franta-hg@23
    29
    public void generujSouhrn(Cil cil, Date den) {
franta-hg@22
    30
        Connection dbZdroj = getSpojeni(cil.getDatabaze());
franta-hg@22
    31
        Connection dbSouhrn = getSpojeni(null);
franta-hg@22
    32
franta-hg@22
    33
        if (dbZdroj == null || dbSouhrn == null) {
franta-hg@22
    34
            /** TODO: Chyba spojení */
franta-hg@22
    35
        } else {
franta-hg@22
    36
            PreparedStatement ps = null;
franta-hg@23
    37
            PreparedStatement psSmazat = null;
franta-hg@22
    38
            ResultSet rs = null;
franta-hg@22
    39
            try {
franta-hg@23
    40
                log.log(Level.SEVERE, "AUTOCOMIT: " + dbSouhrn.getAutoCommit());
franta-hg@23
    41
                dbSouhrn.setAutoCommit(false);
franta-hg@23
    42
franta-hg@23
    43
                /** pokud už něco vygenerovaného pro daný den a cíl máme, smažeme to */
franta-hg@23
    44
                psSmazat = dbSouhrn.prepareStatement(getSQL(SQL.SMAZ_SOUHRNY));
franta-hg@23
    45
                psSmazat.setInt(1, cil.getId());
franta-hg@23
    46
                psSmazat.setDate(2, den);
franta-hg@23
    47
                psSmazat.executeUpdate();
franta-hg@23
    48
franta-hg@22
    49
                ps = dbZdroj.prepareStatement(cil.getSelekt());
franta-hg@22
    50
                ps.setDate(1, den);
franta-hg@22
    51
                rs = ps.executeQuery();
franta-hg@22
    52
                PreparedStatement psSouhrn = dbSouhrn.prepareStatement(getSQL(SQL.VLOZ_SOUHRN));
franta-hg@22
    53
                while (rs.next()) {
franta-hg@22
    54
                    /**
franta-hg@22
    55
                     * Souhrn bychom mohli vkládat pomocí SouhrnDAO,
franta-hg@22
    56
                     * ale z výkonnostních důvodů to budeme dělat tady
franta-hg@22
    57
                     * (jedno spojení a jeden předpřipravený příkaz).
franta-hg@22
    58
                     */
franta-hg@22
    59
                    psSouhrn.setDate(1, den);
franta-hg@22
    60
                    psSouhrn.setString(2, rs.getString("ip"));
franta-hg@23
    61
                    psSouhrn.setString(3, prelozIP(rs.getString("ip")));
franta-hg@22
    62
                    psSouhrn.setInt(4, rs.getInt("pocet"));
franta-hg@22
    63
                    psSouhrn.setInt(5, cil.getId());
franta-hg@22
    64
                    psSouhrn.executeUpdate();
franta-hg@22
    65
                }
franta-hg@22
    66
                zavri(null, psSouhrn, null);
franta-hg@22
    67
                dbSouhrn.commit();
franta-hg@22
    68
            } catch (Exception e) {
franta-hg@22
    69
                log.log(Level.SEVERE, "Chyba při generování souhrnu.", e);
franta-hg@22
    70
            } finally {
franta-hg@22
    71
                zavri(dbZdroj, ps, rs);
franta-hg@23
    72
                zavri(dbSouhrn, psSmazat, null);
franta-hg@22
    73
            }
franta-hg@22
    74
        }
franta-hg@22
    75
    }
franta-hg@22
    76
franta-hg@22
    77
    /**
franta-hg@22
    78
     * Vygeneruje denní souhrny pro všechny cíle.
franta-hg@22
    79
     * @param den den, pro který souhrny generujeme.
franta-hg@22
    80
     */
franta-hg@22
    81
    public void generujSouhrny(Date den) {
franta-hg@23
    82
        if (den == null) {
franta-hg@23
    83
            den = SouhrnDAO.getVychoziDen();
franta-hg@23
    84
        }
franta-hg@23
    85
franta-hg@22
    86
        Collection<Cil> cile = new CilDAO().getCile();
franta-hg@22
    87
        for (Cil c : cile) {
franta-hg@22
    88
            generujSouhrn(c, den);
franta-hg@22
    89
        }
franta-hg@22
    90
    }
franta-hg@23
    91
franta-hg@23
    92
    /**
franta-hg@23
    93
     * Přeloží IP adresu na doménu
franta-hg@23
    94
     * @param ip IP adresa
franta-hg@23
    95
     * @return doména
franta-hg@23
    96
     */
franta-hg@23
    97
    private static String prelozIP(String ip) {
franta-hg@23
    98
        try {
franta-hg@23
    99
            return InetAddress.getByName(ip).getHostName();
franta-hg@23
   100
        } catch (Exception e) {
franta-hg@23
   101
            return "Chyba: nepodařilo se přeložit.";
franta-hg@23
   102
        }
franta-hg@23
   103
    }
franta-hg@22
   104
}