franta-hg@22: package cz.frantovo.hrisniciSpameri.dao; franta-hg@22: franta-hg@22: import cz.frantovo.hrisniciSpameri.dto.Cil; franta-hg@23: import java.net.InetAddress; franta-hg@22: import java.sql.Connection; franta-hg@22: import java.sql.Date; franta-hg@22: import java.sql.PreparedStatement; franta-hg@22: import java.sql.ResultSet; franta-hg@22: import java.util.Collection; franta-hg@22: import java.util.logging.Level; franta-hg@22: franta-hg@22: /** franta-hg@22: * franta-hg@22: * @author fiki franta-hg@22: */ franta-hg@22: public class GeneratorSouhrnuDAO extends HrisniciSuperDAO { franta-hg@22: franta-hg@22: private enum SQL { franta-hg@22: franta-hg@23: VLOZ_SOUHRN, franta-hg@23: SMAZ_SOUHRNY franta-hg@22: } franta-hg@22: franta-hg@22: /** franta-hg@22: * Vygeneruje souhrn pro daný cíl a datum a uloží ho do databáze franta-hg@22: * @param cil cíl, pro který generujeme souhrn franta-hg@22: * @param den den, pro který souhrn generujeme. franta-hg@22: */ franta-hg@28: public void generujSouhrn(Cil cil, Date zacatek, Date konec) { franta-hg@22: Connection dbZdroj = getSpojeni(cil.getDatabaze()); franta-hg@22: Connection dbSouhrn = getSpojeni(null); franta-hg@22: franta-hg@28: if (konec == null) { franta-hg@28: konec = zacatek; franta-hg@28: } franta-hg@28: franta-hg@22: if (dbZdroj == null || dbSouhrn == null) { franta-hg@22: /** TODO: Chyba spojení */ franta-hg@22: } else { franta-hg@22: PreparedStatement ps = null; franta-hg@23: PreparedStatement psSmazat = null; franta-hg@22: ResultSet rs = null; franta-hg@22: try { franta-hg@23: /** pokud už něco vygenerovaného pro daný den a cíl máme, smažeme to */ franta-hg@23: psSmazat = dbSouhrn.prepareStatement(getSQL(SQL.SMAZ_SOUHRNY)); franta-hg@23: psSmazat.setInt(1, cil.getId()); franta-hg@28: psSmazat.setDate(2, zacatek); franta-hg@28: psSmazat.setDate(3, konec); franta-hg@23: psSmazat.executeUpdate(); franta-hg@23: franta-hg@22: ps = dbZdroj.prepareStatement(cil.getSelekt()); franta-hg@28: ps.setDate(1, zacatek); franta-hg@28: ps.setDate(2, konec); franta-hg@22: rs = ps.executeQuery(); franta-hg@22: PreparedStatement psSouhrn = dbSouhrn.prepareStatement(getSQL(SQL.VLOZ_SOUHRN)); franta-hg@22: while (rs.next()) { franta-hg@22: /** franta-hg@22: * Souhrn bychom mohli vkládat pomocí SouhrnDAO, franta-hg@22: * ale z výkonnostních důvodů to budeme dělat tady franta-hg@22: * (jedno spojení a jeden předpřipravený příkaz). franta-hg@22: */ franta-hg@28: psSouhrn.setDate(1, rs.getDate("den")); franta-hg@22: psSouhrn.setString(2, rs.getString("ip")); franta-hg@23: psSouhrn.setString(3, prelozIP(rs.getString("ip"))); franta-hg@22: psSouhrn.setInt(4, rs.getInt("pocet")); franta-hg@22: psSouhrn.setInt(5, cil.getId()); franta-hg@22: psSouhrn.executeUpdate(); franta-hg@22: } franta-hg@22: zavri(null, psSouhrn, null); franta-hg@22: dbSouhrn.commit(); franta-hg@22: } catch (Exception e) { franta-hg@22: log.log(Level.SEVERE, "Chyba při generování souhrnu.", e); franta-hg@22: } finally { franta-hg@22: zavri(dbZdroj, ps, rs); franta-hg@23: zavri(dbSouhrn, psSmazat, null); franta-hg@22: } franta-hg@22: } franta-hg@22: } franta-hg@22: franta-hg@22: /** franta-hg@28: * Vygeneruje denní souhrny pro všechny cíle za dané období. franta-hg@28: * @param zacatek začátek období – včetně franta-hg@28: * @param konec konec období – včetně franta-hg@22: */ franta-hg@28: public void generujSouhrny(Date zacatek, Date konec) { franta-hg@22: Collection cile = new CilDAO().getCile(); franta-hg@22: for (Cil c : cile) { franta-hg@28: generujSouhrn(c, zacatek, konec); franta-hg@22: } franta-hg@22: } franta-hg@23: franta-hg@23: /** franta-hg@23: * Přeloží IP adresu na doménu franta-hg@23: * @param ip IP adresa franta-hg@23: * @return doména franta-hg@23: */ franta-hg@23: private static String prelozIP(String ip) { franta-hg@23: try { franta-hg@23: return InetAddress.getByName(ip).getHostName(); franta-hg@23: } catch (Exception e) { franta-hg@23: return "Chyba: nepodařilo se přeložit."; franta-hg@23: } franta-hg@23: } franta-hg@22: }