franta-hg@6: package cz.frantovo.hrisniciSpameri.dao; franta-hg@6: franta-hg@21: import cz.frantovo.hrisniciSpameri.dto.Cil; franta-hg@21: import cz.frantovo.hrisniciSpameri.dto.SitovaAdresa; franta-hg@40: import cz.frantovo.hrisniciSpameri.dto.Soucet; franta-hg@21: import cz.frantovo.hrisniciSpameri.dto.Souhrn; franta-hg@21: import java.sql.Connection; franta-hg@21: import java.sql.Date; franta-hg@21: import java.sql.PreparedStatement; franta-hg@21: import java.sql.ResultSet; franta-hg@21: import java.util.ArrayList; franta-hg@21: import java.util.Collection; franta-hg@40: import java.util.HashMap; franta-hg@21: import java.util.logging.Level; franta-hg@21: franta-hg@6: /** franta-hg@6: * franta-hg@6: * @author fiki franta-hg@6: */ franta-hg@6: public class SouhrnDAO extends HrisniciSuperDAO { franta-hg@21: franta-hg@21: private enum SQL { franta-hg@21: franta-hg@21: DENNI_SOUHRN, franta-hg@21: DENNI_SOUHRN_CIL, franta-hg@40: DENNI_SOUCTY, franta-hg@40: DENNI_SOUCTY_CIL franta-hg@21: } franta-hg@23: franta-hg@21: /** franta-hg@21: * Získá z databáze souhrn útoků. Buď pro konkrétní den nebo pro dané období. franta-hg@21: * @param zacatek začátek období nebo konkrétní den franta-hg@21: * @param konec konec období nebo null (pokud nás zajímá konkrétní den) franta-hg@21: * @param cil id cíle nebo nula, pokud chceme všechny cíle franta-hg@21: * @return seznam útoků franta-hg@21: */ franta-hg@21: public Collection getSouhrn(Date zacatek, Date konec, int cil) { franta-hg@21: Collection souhrn = new ArrayList(); franta-hg@21: franta-hg@21: Connection db = getSpojeni(null); franta-hg@21: if (db == null) { franta-hg@21: return null; franta-hg@21: } else { franta-hg@21: PreparedStatement ps = null; franta-hg@21: ResultSet rs = null; franta-hg@21: try { franta-hg@21: if (konec == null) { franta-hg@24: konec = zacatek; franta-hg@24: } franta-hg@30: franta-hg@24: if (cil == 0) { franta-hg@24: ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN)); franta-hg@24: ps.setDate(1, zacatek); franta-hg@24: ps.setDate(2, konec); franta-hg@21: } else { franta-hg@24: ps = db.prepareStatement(getSQL(SQL.DENNI_SOUHRN_CIL)); franta-hg@24: ps.setDate(1, zacatek); franta-hg@24: ps.setDate(2, konec); franta-hg@24: ps.setInt(3, cil); franta-hg@21: } franta-hg@21: rs = ps.executeQuery(); franta-hg@21: while (rs.next()) { franta-hg@21: Souhrn s = new Souhrn(); franta-hg@21: s.setAdresa(new SitovaAdresa(rs.getString("ip"), rs.getString("domena"))); franta-hg@21: s.setDen(rs.getDate("den")); franta-hg@21: s.setPocet(rs.getInt("pocet")); franta-hg@21: franta-hg@21: Cil c = new Cil(); franta-hg@21: c.setId(rs.getInt("id")); franta-hg@21: c.setNazev(rs.getString("nazev")); franta-hg@21: c.setUrl(rs.getString("url")); franta-hg@21: c.setSelekt(rs.getString("selekt")); franta-hg@21: c.setDatabaze(rs.getString("databaze")); franta-hg@21: s.setCil(c); franta-hg@21: franta-hg@21: souhrn.add(s); franta-hg@21: } franta-hg@21: } catch (Exception e) { franta-hg@21: log.log(Level.SEVERE, "Chyba při získávání souhrnu z databáze", e); franta-hg@21: } finally { franta-hg@21: zavri(db, ps, rs); franta-hg@21: } franta-hg@21: } franta-hg@21: franta-hg@21: return souhrn; franta-hg@21: } franta-hg@40: franta-hg@40: /** franta-hg@40: * @param zacatek začátek období nebo konkrétní den franta-hg@40: * @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: * @param cil id cíle nebo nula, pokud chceme všechny cíle franta-hg@40: * @return součty útoků za jednotlivé dny, seskupené podle cílů franta-hg@40: */ franta-hg@40: public HashMap> getSoucty(Date zacatek, Date konec, int cil) { franta-hg@40: HashMap> soucty = new HashMap>(); franta-hg@40: franta-hg@40: Connection db = getSpojeni(null); franta-hg@40: if (db == null) { franta-hg@40: return null; franta-hg@40: } else { franta-hg@40: PreparedStatement ps = null; franta-hg@40: ResultSet rs = null; franta-hg@40: try { franta-hg@40: if (konec == null) { franta-hg@40: konec = zacatek; franta-hg@40: } franta-hg@40: franta-hg@40: if (cil == 0) { franta-hg@40: ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY)); franta-hg@40: ps.setDate(1, zacatek); franta-hg@40: ps.setDate(2, konec); franta-hg@40: } else { franta-hg@40: ps = db.prepareStatement(getSQL(SQL.DENNI_SOUCTY_CIL)); franta-hg@40: ps.setDate(1, zacatek); franta-hg@40: ps.setDate(2, konec); franta-hg@40: ps.setInt(3, cil); franta-hg@40: } franta-hg@40: rs = ps.executeQuery(); franta-hg@40: while (rs.next()) { franta-hg@40: Soucet s = new Soucet(); franta-hg@40: s.setDen(rs.getDate("den")); franta-hg@40: s.setPocet(rs.getInt("pocet")); franta-hg@40: franta-hg@40: Cil c = new Cil(); franta-hg@40: c.setId(rs.getInt("id")); franta-hg@40: c.setNazev(rs.getString("nazev")); franta-hg@40: c.setUrl(rs.getString("url")); franta-hg@40: c.setSelekt(rs.getString("selekt")); franta-hg@40: c.setDatabaze(rs.getString("databaze")); franta-hg@40: s.setCil(c); franta-hg@40: franta-hg@40: if (soucty.get(c) == null) { franta-hg@40: soucty.put(c, new ArrayList()); franta-hg@40: } franta-hg@40: franta-hg@40: soucty.get(c).add(s); franta-hg@40: } franta-hg@40: } catch (Exception e) { franta-hg@40: log.log(Level.SEVERE, "Chyba při získávání součtů z databáze", e); franta-hg@40: } finally { franta-hg@40: zavri(db, ps, rs); franta-hg@40: } franta-hg@40: } franta-hg@40: return soucty; franta-hg@40: } franta-hg@30: }