java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/dao/SouhrnDAO.java
author František Kučera <franta-hg@frantovo.cz>
Mon, 23 Mar 2009 17:00:23 +0100
changeset 49 491d1055972e
parent 40 fd29fd5a8e29
permissions -rw-r--r--
Metoda nebude deklarovat, že vrací HashMapu, ale jen Mapu – obecné rozhraní místo konkrétní implementace (uvnitř se stále používá HashMapa).
franta-hg@6
     1
package cz.frantovo.hrisniciSpameri.dao;
franta-hg@6
     2
franta-hg@21
     3
import cz.frantovo.hrisniciSpameri.dto.Cil;
franta-hg@21
     4
import cz.frantovo.hrisniciSpameri.dto.SitovaAdresa;
franta-hg@40
     5
import cz.frantovo.hrisniciSpameri.dto.Soucet;
franta-hg@21
     6
import cz.frantovo.hrisniciSpameri.dto.Souhrn;
franta-hg@21
     7
import java.sql.Connection;
franta-hg@21
     8
import java.sql.Date;
franta-hg@21
     9
import java.sql.PreparedStatement;
franta-hg@21
    10
import java.sql.ResultSet;
franta-hg@21
    11
import java.util.ArrayList;
franta-hg@21
    12
import java.util.Collection;
franta-hg@40
    13
import java.util.HashMap;
franta-hg@49
    14
import java.util.Map;
franta-hg@21
    15
import java.util.logging.Level;
franta-hg@21
    16
franta-hg@6
    17
/**
franta-hg@6
    18
 *
franta-hg@6
    19
 * @author fiki
franta-hg@6
    20
 */
franta-hg@6
    21
public class SouhrnDAO extends HrisniciSuperDAO {
franta-hg@21
    22
franta-hg@21
    23
    private enum SQL {
franta-hg@21
    24
franta-hg@21
    25
        DENNI_SOUHRN,
franta-hg@21
    26
        DENNI_SOUHRN_CIL,
franta-hg@40
    27
        DENNI_SOUCTY,
franta-hg@40
    28
        DENNI_SOUCTY_CIL
franta-hg@21
    29
    }
franta-hg@23
    30
franta-hg@21
    31
    /**
franta-hg@21
    32
     * Získá z databáze souhrn útoků. Buď pro konkrétní den nebo pro dané období.
franta-hg@21
    33
     * @param zacatek začátek období nebo konkrétní den
franta-hg@21
    34
     * @param konec konec období nebo null (pokud nás zajímá konkrétní den)
franta-hg@21
    35
     * @param cil id cíle nebo nula, pokud chceme všechny cíle
franta-hg@21
    36
     * @return seznam útoků
franta-hg@21
    37
     */
franta-hg@21
    38
    public Collection<Souhrn> getSouhrn(Date zacatek, Date konec, int cil) {
franta-hg@21
    39
        Collection<Souhrn> souhrn = new ArrayList<Souhrn>();
franta-hg@21
    40
franta-hg@21
    41
        Connection db = getSpojeni(null);
franta-hg@21
    42
        if (db == null) {
franta-hg@21
    43
            return null;
franta-hg@21
    44
        } else {
franta-hg@21
    45
            PreparedStatement ps = null;
franta-hg@21
    46
            ResultSet rs = null;
franta-hg@21
    47
            try {
franta-hg@21
    48
                if (konec == null) {
franta-hg@24
    49
                    konec = zacatek;
franta-hg@24
    50
                }
franta-hg@30
    51
franta-hg@24
    52
                if (cil == 0) {
franta-hg@24
    53
                    ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN));
franta-hg@24
    54
                    ps.setDate(1, zacatek);
franta-hg@24
    55
                    ps.setDate(2, konec);
franta-hg@21
    56
                } else {
franta-hg@24
    57
                    ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN_CIL));
franta-hg@24
    58
                    ps.setDate(1, zacatek);
franta-hg@24
    59
                    ps.setDate(2, konec);
franta-hg@24
    60
                    ps.setInt(3, cil);
franta-hg@21
    61
                }
franta-hg@21
    62
                rs = ps.executeQuery();
franta-hg@21
    63
                while (rs.next()) {
franta-hg@21
    64
                    Souhrn s = new Souhrn();
franta-hg@21
    65
                    s.setAdresa(new SitovaAdresa(rs.getString("ip"), rs.getString("domena")));
franta-hg@21
    66
                    s.setDen(rs.getDate("den"));
franta-hg@21
    67
                    s.setPocet(rs.getInt("pocet"));
franta-hg@21
    68
franta-hg@21
    69
                    Cil c = new Cil();
franta-hg@21
    70
                    c.setId(rs.getInt("id"));
franta-hg@21
    71
                    c.setNazev(rs.getString("nazev"));
franta-hg@21
    72
                    c.setUrl(rs.getString("url"));
franta-hg@21
    73
                    c.setSelekt(rs.getString("selekt"));
franta-hg@21
    74
                    c.setDatabaze(rs.getString("databaze"));
franta-hg@21
    75
                    s.setCil(c);
franta-hg@21
    76
franta-hg@21
    77
                    souhrn.add(s);
franta-hg@21
    78
                }
franta-hg@21
    79
            } catch (Exception e) {
franta-hg@21
    80
                log.log(Level.SEVERE, "Chyba při získávání souhrnu z databáze", e);
franta-hg@21
    81
            } finally {
franta-hg@21
    82
                zavri(db, ps, rs);
franta-hg@21
    83
            }
franta-hg@21
    84
        }
franta-hg@21
    85
franta-hg@21
    86
        return souhrn;
franta-hg@21
    87
    }
franta-hg@40
    88
franta-hg@40
    89
    /**
franta-hg@40
    90
     * @param zacatek začátek období nebo konkrétní den
franta-hg@40
    91
     * @param konec konec období nebo null (pokud nás zajímá konkrétní den – což nás tady většinou nezajímá)
franta-hg@40
    92
     * @param cil id cíle nebo nula, pokud chceme všechny cíle
franta-hg@40
    93
     * @return součty útoků za jednotlivé dny, seskupené podle cílů
franta-hg@40
    94
     */
franta-hg@49
    95
    public Map<Cil, Collection<Soucet>> getSoucty(Date zacatek, Date konec, int cil) {
franta-hg@40
    96
        HashMap<Cil, Collection<Soucet>> soucty = new HashMap<Cil, Collection<Soucet>>();
franta-hg@40
    97
franta-hg@40
    98
        Connection db = getSpojeni(null);
franta-hg@40
    99
        if (db == null) {
franta-hg@40
   100
            return null;
franta-hg@40
   101
        } else {
franta-hg@40
   102
            PreparedStatement ps = null;
franta-hg@40
   103
            ResultSet rs = null;
franta-hg@40
   104
            try {
franta-hg@40
   105
                if (konec == null) {
franta-hg@40
   106
                    konec = zacatek;
franta-hg@40
   107
                }
franta-hg@40
   108
franta-hg@40
   109
                if (cil == 0) {
franta-hg@40
   110
                    ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY));
franta-hg@40
   111
                    ps.setDate(1, zacatek);
franta-hg@40
   112
                    ps.setDate(2, konec);
franta-hg@40
   113
                } else {
franta-hg@40
   114
                    ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY_CIL));
franta-hg@40
   115
                    ps.setDate(1, zacatek);
franta-hg@40
   116
                    ps.setDate(2, konec);
franta-hg@40
   117
                    ps.setInt(3, cil);
franta-hg@40
   118
                }
franta-hg@40
   119
                rs = ps.executeQuery();
franta-hg@40
   120
                while (rs.next()) {
franta-hg@40
   121
                    Soucet s = new Soucet();
franta-hg@40
   122
                    s.setDen(rs.getDate("den"));
franta-hg@40
   123
                    s.setPocet(rs.getInt("pocet"));
franta-hg@40
   124
franta-hg@40
   125
                    Cil c = new Cil();
franta-hg@40
   126
                    c.setId(rs.getInt("id"));
franta-hg@40
   127
                    c.setNazev(rs.getString("nazev"));
franta-hg@40
   128
                    c.setUrl(rs.getString("url"));
franta-hg@40
   129
                    c.setSelekt(rs.getString("selekt"));
franta-hg@40
   130
                    c.setDatabaze(rs.getString("databaze"));
franta-hg@40
   131
                    s.setCil(c);
franta-hg@40
   132
franta-hg@40
   133
                    if (soucty.get(c) == null) {
franta-hg@40
   134
                        soucty.put(c, new ArrayList<Soucet>());
franta-hg@40
   135
                    }
franta-hg@40
   136
franta-hg@40
   137
                    soucty.get(c).add(s);
franta-hg@40
   138
                }
franta-hg@40
   139
            } catch (Exception e) {
franta-hg@40
   140
                log.log(Level.SEVERE, "Chyba při získávání součtů z databáze", e);
franta-hg@40
   141
            } finally {
franta-hg@40
   142
                zavri(db, ps, rs);
franta-hg@40
   143
            }
franta-hg@40
   144
        }
franta-hg@40
   145
        return soucty;
franta-hg@40
   146
    }
franta-hg@30
   147
}