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