java/HrisniciSpameri/src/java/cz/frantovo/hrisniciSpameri/DenniSouhrn.java
author František Kučera <franta-hg@frantovo.cz>
Mon Mar 09 01:42:06 2009 +0100 (2009-03-09)
changeset 47 3ac84fe439be
parent 46 f8acec3533bc
child 48 44a23e6e15d3
permissions -rw-r--r--
Synchronizace SimpleDateFormat – místo synchronizovaných metod bude stačit nestatická proměnná SimpleDateFormat
     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             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 prezentační vrstvy */
   154         for (Collection<Soucet> ss : soucty.values()) {
   155             for (Soucet s : ss) {
   156                 filtrujCil(s.getCil());
   157             }
   158         }
   159 
   160         return soucty;
   161     }
   162 
   163     /**
   164      * @return Seznam všech cílů. Ale bez těchto hodnot: databáze a selekt.
   165      */
   166     public Collection<Cil> getSeznamCilu() {
   167         Collection<Cil> cile = new CilDAO().getCile();
   168         /** ne všechno musíme posílat do prezentační vrstvy */
   169         filtrujCile(cile);
   170         return cile;
   171     }
   172 
   173     /**
   174      * Vymaže u cílů hodnoty „databáze“ a „selekt“ – ktreré v prezentační vrstvě většinou nepotřebujeme
   175      * @param cile kolekce, který bude upravena
   176      */
   177     private static void filtrujCile(Collection<Cil> cile) {
   178         for (Cil c : cile) {
   179             filtrujCil(c);
   180         }
   181     }
   182 
   183     /**
   184      * Vymaže u cíle hodnoty „databáze“ a „selekt“ – ktreré v prezentační vrstvě většinou nepotřebujeme
   185      * @param c cíl, který bude upraven
   186      */
   187     private static void filtrujCil(Cil c) {
   188         c.setDatabaze(null);
   189         c.setSelekt(null);
   190     }
   191 
   192     /**
   193      * @return Výchozí začátek je před měsícem
   194      */
   195     private static Date getVychoziZacatek() {
   196         Calendar c = Calendar.getInstance();
   197         c.add(Calendar.MONTH, -1);
   198         return new Date(c.getTimeInMillis());
   199     }
   200 
   201     /**
   202      * @return  Výchozí konec je současnost
   203      */
   204     private static Date getVychoziKonec() {
   205         return new Date(System.currentTimeMillis());
   206     }
   207 }