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