java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java
author František Kučera <franta-hg@frantovo.cz>
Mon, 09 Mar 2009 01:58:02 +0100
changeset 48 44a23e6e15d3
parent 47 3ac84fe439be
child 49 491d1055972e
permissions -rw-r--r--
Filtrování informací, které nejsou potřebné v prezentační vrstvě – zapomenutá kontrola
     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 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             filtrujCil(s.getCil());
   139         }
   140 
   141         return souhrn;
   142     }
   143 
   144     /**
   145      * @return Vyšší stupeň agregace než souhrn –
   146      * obsahuje jen součty útoků pro daný den a daný cíl,
   147      * neobsahuje podrobnosti o útočnících (ip adresa, doména).
   148      */
   149     public HashMap<Cil, Collection<Soucet>> getSoucty() {
   150         HashMap<Cil, Collection<Soucet>> soucty = new SouhrnDAO().getSoucty(zacatek, konec, cil);
   151 
   152         /** ne všechno musíme posílat do prezentační vrstvy */
   153         for (Collection<Soucet> ss : soucty.values()) {
   154             for (Soucet s : ss) {
   155                 filtrujCil(s.getCil());
   156             }
   157         }
   158 
   159         return soucty;
   160     }
   161 
   162     /**
   163      * @return Seznam všech cílů. Ale bez těchto hodnot: databáze a selekt.
   164      */
   165     public Collection<Cil> getSeznamCilu() {
   166         Collection<Cil> cile = new CilDAO().getCile();
   167         /** ne všechno musíme posílat do prezentační vrstvy */
   168         filtrujCile(cile);
   169         return cile;
   170     }
   171 
   172     /**
   173      * Vymaže u cílů hodnoty „databáze“ a „selekt“ – ktreré v prezentační vrstvě většinou nepotřebujeme
   174      * @param cile kolekce, který bude upravena
   175      */
   176     private static void filtrujCile(Collection<Cil> cile) {
   177         for (Cil c : cile) {
   178             filtrujCil(c);
   179         }
   180     }
   181 
   182     /**
   183      * Vymaže u cíle hodnoty „databáze“ a „selekt“ – ktreré v prezentační vrstvě většinou nepotřebujeme
   184      * @param c cíl, který bude upraven
   185      */
   186     private static void filtrujCil(Cil c) {
   187         c.setDatabaze(null);
   188         c.setSelekt(null);
   189     }
   190 
   191     /**
   192      * @return Výchozí začátek je před měsícem
   193      */
   194     private static Date getVychoziZacatek() {
   195         Calendar c = Calendar.getInstance();
   196         c.add(Calendar.MONTH, -1);
   197         return new Date(c.getTimeInMillis());
   198     }
   199 
   200     /**
   201      * @return  Výchozí konec je současnost
   202      */
   203     private static Date getVychoziKonec() {
   204         return new Date(System.currentTimeMillis());
   205     }
   206 }