java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java
author František Kučera <franta-hg@frantovo.cz>
Sun, 01 Mar 2009 13:04:10 +0100
changeset 40 fd29fd5a8e29
parent 30 0ffc8c1b2b9c
child 45 9e0fc657a9a9
permissions -rw-r--r--
Graf zobrazuje skutečná data – Počty útoků za den
     1 package cz.frantovo.hrisniciSpameri;
     2 
     3 import cz.frantovo.hrisniciSpameri.dao.CilDAO;
     4 import cz.frantovo.hrisniciSpameri.dao.SouhrnDAO;
     5 import cz.frantovo.hrisniciSpameri.dto.Cil;
     6 import cz.frantovo.hrisniciSpameri.dto.Soucet;
     7 import cz.frantovo.hrisniciSpameri.dto.Souhrn;
     8 import java.io.Serializable;
     9 import java.sql.Date;
    10 import java.text.DateFormat;
    11 import java.text.ParseException;
    12 import java.text.SimpleDateFormat;
    13 import java.util.Calendar;
    14 import java.util.Collection;
    15 import java.util.HashMap;
    16 import java.util.logging.Level;
    17 import java.util.logging.Logger;
    18 
    19 /**
    20  * Beana zprostředkovávající denní souhrn hříšníků.
    21  * @author fiki
    22  */
    23 public class DenniSouhrn implements Serializable {
    24 
    25     private static final long serialVersionUID = 7932392366943861342L;
    26     private static final Logger log = Logger.getLogger(DenniSouhrn.class.getName());
    27     private static String formatDataVzor = "yyyy-MM-dd";
    28     public static DateFormat formatData = new SimpleDateFormat(formatDataVzor);
    29     private Date zacatek;
    30     private Date konec;
    31     private int cil;
    32 
    33     public String getZacatekString() {
    34         return formatData.format(getZacatek());
    35     }
    36 
    37     public Date getZacatek() {
    38         if (zacatek == null) {
    39             nastavVychoziZacatek();
    40         }
    41         return zacatek;
    42     }
    43 
    44     public void setZacatek(Date zacatek) {
    45         if (zacatek == null) {
    46             nastavVychoziZacatek();
    47         } else {
    48             this.zacatek = zacatek;
    49         }
    50         log.log(Level.FINE, "Začátek nastaven na: " + formatData.format(zacatek));
    51     }
    52 
    53     public void setZacatekString(String zacatek) {
    54         if (zacatek == null) {
    55             nastavVychoziZacatek();
    56         } else {
    57             try {
    58                 this.zacatek = new Date(formatData.parse(zacatek).getTime());
    59             } catch (ParseException e) {
    60                 log.log(Level.FINE, "Chybně zadané datum – začátek: " + zacatek, e);
    61                 nastavVychoziZacatek();
    62             }
    63         }
    64     }
    65 
    66     public Date getKonec() {
    67         if (konec == null) {
    68             nastavVychoziKonec();
    69         }
    70         return konec;
    71     }
    72 
    73     public void setKonec(Date konec) {
    74         if (konec == null) {
    75             nastavVychoziKonec();
    76         } else {
    77             this.konec = konec;
    78         }
    79         log.log(Level.FINE, "Konec nastaven na: " + formatData.format(zacatek));
    80     }
    81 
    82     public void setKonecString(String konec) {
    83         if (konec == null) {
    84             nastavVychoziKonec();
    85         } else {
    86             try {
    87                 this.konec = new Date(formatData.parse(konec).getTime());
    88             } catch (Exception e) {
    89                 nastavVychoziKonec();
    90             }
    91         }
    92     }
    93 
    94     public String getKonecString() {
    95         return formatData.format(getKonec());
    96     }
    97 
    98     public void setCilString(String cil) {
    99         try {
   100             this.cil = Integer.parseInt(cil);
   101         } catch (Exception e) {
   102             this.cil = 0;
   103         }
   104     }
   105 
   106     public void setCil(int cil) {
   107         this.cil = cil;
   108     }
   109 
   110     public String getCilString() {
   111         return String.valueOf(cil);
   112     }
   113 
   114     public int getCil() {
   115         return cil;
   116     }
   117 
   118     private void nastavVychoziZacatek() {
   119         log.log(Level.FINE, "Nastavuji začátek na výchozí hodnotu.");
   120         setZacatek(getVychoziZacatek());
   121     }
   122 
   123     private void nastavVychoziKonec() {
   124         log.log(Level.FINE, "Nastavuji konec na výchozí hodnotu.");
   125         setKonec(getVychoziKonec());
   126     }
   127 
   128     /**
   129      * @return Denní souhrny útoků –
   130      * obsahuje IP adresy a domény útočníků,
   131      * datum je den poslendího útoku daného útočníka na daný cíl.
   132      */
   133     public Collection<Souhrn> getSouhrn() {
   134         Collection<Souhrn> souhrn = new SouhrnDAO().getSouhrn(zacatek, konec, cil);
   135 
   136         /** ne všechno musíme posílat do JSP vrstvy */
   137         for (Souhrn s : souhrn) {
   138             s.getCil().setDatabaze(null);
   139             s.getCil().setSelekt(null);
   140         }
   141 
   142         return souhrn;
   143     }
   144 
   145     /**
   146      * @return Vyšší stupeň agregace než souhrn –
   147      * obsahuje jen součty útoků pro daný den a daný cíl,
   148      * neobsahuje podrobnosti o útočnících (ip adresa, doména).
   149      */
   150     public HashMap<Cil, Collection<Soucet>> getSoucty() {
   151         HashMap<Cil, Collection<Soucet>> soucty = new SouhrnDAO().getSoucty(zacatek, konec, cil);
   152 
   153         /** ne všechno musíme posílat do JSP vrstvy */
   154         for (Collection<Soucet> ss : soucty.values()) {
   155             for (Soucet s : ss) {
   156                 s.getCil().setDatabaze(null);
   157                 s.getCil().setSelekt(null);
   158             }
   159         }
   160 
   161         return soucty;
   162     }
   163 
   164     /**
   165      * @return Seznam všech cílů. Ale bez těchto hodnot: databáze a selekt.
   166      */
   167     public Collection<Cil> getSeznamCilu() {
   168         Collection<Cil> cile = new CilDAO().getCile();
   169 
   170         /** ne všechno musíme posílat do JSP vrstvy */
   171         for (Cil c : cile) {
   172             c.setDatabaze(null);
   173             c.setSelekt(null);
   174         }
   175 
   176         return cile;
   177     }
   178 
   179     /**
   180      * @return Výchozí začátek je před měsícem
   181      */
   182     private static Date getVychoziZacatek() {
   183         Calendar c = Calendar.getInstance();
   184         c.add(Calendar.MONTH, -1);
   185         return new Date(c.getTimeInMillis());
   186     }
   187 
   188     /**
   189      * @return  Výchozí konec je současnost
   190      */
   191     private static Date getVychoziKonec() {
   192         return new Date(System.currentTimeMillis());
   193     }
   194 }